如何使用这两个参数并通过 powershell 硬编码服务器列表
how to use both parameters and hard-code the servers list through powershell
我正在尝试创建一个脚本,该脚本应该 运行 使用参数而没有参数应该针对多个列表产生结果:
例如:我有一个函数,在该函数下我将参数作为服务器名,这对于获取结果的单服务器广告来说工作正常。
(RestoreFileList -servername XXXXXXXXXXX1)
如果我不想将参数作为服务器名提供,输出结果应该是完整的服务器列表数据集
例如:Restorefilecount
我是否遗漏了应该获取结果的参数和服务器列表条件之间的某些内容,对此有任何帮助吗?
脚本 *************
function Restorefilecount()
{
[cmdletbinding()]
param(
[Parameter(position = 0,mandatory = $false)]
[string] $Servername
)
$servername = @()
$servername = ('XXXXXXXX1', 'XXXXXXXXX2', 'XXXXXXXXX3', 'XXXXXXXXXX4')
$result = Invoke-Client -ComputerName $Servername -ScriptBlock {
$Server = HOSTNAME.EXE
$Query = @'
Select @@ServerName AS ServerName , name,(SUBSTRING(NAME ,15,3) * 100 ) / 100 AS
file,state_desc,user_access_desc FROM master.sys.databases where name like 'TKT' ORDER BY 2
'@
Invoke-Sqlcmd -ServerInstance $Server -Database master -Query $Query
}
基于 Abraham Zinala 的有用评论:
看起来您只是想定义参数的默认值:
function Restore-FileCount {
[CmdletBinding()]
param(
[string[]] $Servername = @('XXXXXXXX1', 'XXXXXXXXX2', 'XXXXXXXXX3', 'XXXXXXXXXX4')
)
# ...
$Servername # Output for demo purposes
}
请注意如何将参数类型从 [string]
更改为 [string[]]
以支持 数组 值。
附带更改:
由于您使用 param(...)
块来定义参数(通常更可取),因此无需在函数名称后放置 ()
(Restorefilecount()
) - 只要 (
和 )
之间没有任何内容或只有空格,这样做就不会导致语法错误,请注意您声明参数 either 通过 param(...)
块 或 通过 function foo(...)
;此外,在 parameter-less 函数中永远不需要 ()
- 请参阅概念性 about_Functions 帮助主题。
我在您的函数名称中插入了一个连字符 (-
),以使其符合 PowerShell 的命名约定。
我省略了[Parameter(position = 0, mandatory = $false)]
,因为这个属性实例指定的内容相当于默认行为(所有参数都是non-mandatory默认情况下,Position=0
由 $ServerName
隐含为 第一个 (也是唯一的)参数。
我正在尝试创建一个脚本,该脚本应该 运行 使用参数而没有参数应该针对多个列表产生结果: 例如:我有一个函数,在该函数下我将参数作为服务器名,这对于获取结果的单服务器广告来说工作正常。 (RestoreFileList -servername XXXXXXXXXXX1)
如果我不想将参数作为服务器名提供,输出结果应该是完整的服务器列表数据集 例如:Restorefilecount
我是否遗漏了应该获取结果的参数和服务器列表条件之间的某些内容,对此有任何帮助吗?
脚本 *************
function Restorefilecount()
{
[cmdletbinding()]
param(
[Parameter(position = 0,mandatory = $false)]
[string] $Servername
)
$servername = @()
$servername = ('XXXXXXXX1', 'XXXXXXXXX2', 'XXXXXXXXX3', 'XXXXXXXXXX4')
$result = Invoke-Client -ComputerName $Servername -ScriptBlock {
$Server = HOSTNAME.EXE
$Query = @'
Select @@ServerName AS ServerName , name,(SUBSTRING(NAME ,15,3) * 100 ) / 100 AS
file,state_desc,user_access_desc FROM master.sys.databases where name like 'TKT' ORDER BY 2
'@
Invoke-Sqlcmd -ServerInstance $Server -Database master -Query $Query
}
基于 Abraham Zinala 的有用评论:
看起来您只是想定义参数的默认值:
function Restore-FileCount {
[CmdletBinding()]
param(
[string[]] $Servername = @('XXXXXXXX1', 'XXXXXXXXX2', 'XXXXXXXXX3', 'XXXXXXXXXX4')
)
# ...
$Servername # Output for demo purposes
}
请注意如何将参数类型从 [string]
更改为 [string[]]
以支持 数组 值。
附带更改:
由于您使用
param(...)
块来定义参数(通常更可取),因此无需在函数名称后放置()
(Restorefilecount()
) - 只要(
和)
之间没有任何内容或只有空格,这样做就不会导致语法错误,请注意您声明参数 either 通过param(...)
块 或 通过function foo(...)
;此外,在 parameter-less 函数中永远不需要()
- 请参阅概念性 about_Functions 帮助主题。我在您的函数名称中插入了一个连字符 (
-
),以使其符合 PowerShell 的命名约定。我省略了
[Parameter(position = 0, mandatory = $false)]
,因为这个属性实例指定的内容相当于默认行为(所有参数都是non-mandatory默认情况下,Position=0
由$ServerName
隐含为 第一个 (也是唯一的)参数。