来自文件的 PowerShell 参数
PowerShell parameters from file
我在使用命名参数调用函数时遇到一些问题。
这是函数在单独文件中的声明(Security.ps1):
function Add-SSRSItemSecurity
(
[Parameter(Position=0,Mandatory=$false)]
[Alias("SSRSrange")]
[string]$range,[Parameter(Position=1,Mandatory=$false)]
[Alias("path")]
[string]$itemPath,
[Parameter(Position=2,Mandatory=$false)]
[Alias("grp")]
[string]$groupUserName,
[Parameter(Position=3,Mandatory=$false)]
[Alias("SSRSrole")]
[string]$role,
[Parameter(Position=2)]
[bool]$inherit=$true
)
然后我在另一个 Host.ps1 脚本中调用这个函数:
Set-Location 'C:\SSRSJobs'
. .\SSRSsecurity.ps1
此调用在主机文件中有效:
Add-SSRSItemSecurity -range "server1" -itemPath "/Test" -groupUserName "CN\Group" -role "Browser"
我尝试将多个参数作为循环传递给函数,但每次都调用新变量:
$securityArray = @()
$securityArray = Get-Content -Path "C\ReleaseSecurity.txt"
foreach($line in $securityArray)
{
Add-SSRSItemSecurity $line;
}
文件有:
-range "server1" -itemPath "/Test" -groupUserName "CN\Group" -role "Browser"
-range "server2" -itemPath "/Test" -groupUserName "CN\Group" -role "Browser"
-range "server3" -itemPath "/Test" -groupUserName "CN\Group" -role "Browser"
我得到的错误是:
Add-SSRSItemSecurity : Cannot bind positional parameters because no names were given.
At line:229 char:27
+ Add-SSRSItemSecurity <<<< $line;
+ CategoryInfo : InvalidArgument: (:) [Add-SSRSItemSecurity], ParameterBindingExcepti
on
+ FullyQualifiedErrorId : AmbiguousPositionalParameterNoName,Add-SSRSItemSecurity
检查字符串,$line
变量确实保存了正确的参数命名。我已经尝试了各种错误捕获,但除了上述之外,我无法获得像样的错误消息。我也尝试过引用形式,但我无法获得查看名称绑定的功能。
可以在一个函数中调用多个变量,而这些变量只绑定到一个 PowerShell 变量名吗?
您可以使用 splatting。将参数保存为 CSV,如下所示:
"range","itemPath","groupUserName","role"
"server1","/Test","CN\Group","Browser"
"server2","/Test","CN\Group","Browser"
"server3","/Test","CN\Group","Browser"
并像这样加载它:
Import-Csv 'C:\ReleaseSecurity.txt' | % {
Add-SSRSItemSecurity @_
}
我在使用命名参数调用函数时遇到一些问题。
这是函数在单独文件中的声明(Security.ps1):
function Add-SSRSItemSecurity
(
[Parameter(Position=0,Mandatory=$false)]
[Alias("SSRSrange")]
[string]$range,[Parameter(Position=1,Mandatory=$false)]
[Alias("path")]
[string]$itemPath,
[Parameter(Position=2,Mandatory=$false)]
[Alias("grp")]
[string]$groupUserName,
[Parameter(Position=3,Mandatory=$false)]
[Alias("SSRSrole")]
[string]$role,
[Parameter(Position=2)]
[bool]$inherit=$true
)
然后我在另一个 Host.ps1 脚本中调用这个函数:
Set-Location 'C:\SSRSJobs'
. .\SSRSsecurity.ps1
此调用在主机文件中有效:
Add-SSRSItemSecurity -range "server1" -itemPath "/Test" -groupUserName "CN\Group" -role "Browser"
我尝试将多个参数作为循环传递给函数,但每次都调用新变量:
$securityArray = @()
$securityArray = Get-Content -Path "C\ReleaseSecurity.txt"
foreach($line in $securityArray)
{
Add-SSRSItemSecurity $line;
}
文件有:
-range "server1" -itemPath "/Test" -groupUserName "CN\Group" -role "Browser"
-range "server2" -itemPath "/Test" -groupUserName "CN\Group" -role "Browser"
-range "server3" -itemPath "/Test" -groupUserName "CN\Group" -role "Browser"
我得到的错误是:
Add-SSRSItemSecurity : Cannot bind positional parameters because no names were given.
At line:229 char:27
+ Add-SSRSItemSecurity <<<< $line;
+ CategoryInfo : InvalidArgument: (:) [Add-SSRSItemSecurity], ParameterBindingExcepti
on
+ FullyQualifiedErrorId : AmbiguousPositionalParameterNoName,Add-SSRSItemSecurity
检查字符串,$line
变量确实保存了正确的参数命名。我已经尝试了各种错误捕获,但除了上述之外,我无法获得像样的错误消息。我也尝试过引用形式,但我无法获得查看名称绑定的功能。
可以在一个函数中调用多个变量,而这些变量只绑定到一个 PowerShell 变量名吗?
您可以使用 splatting。将参数保存为 CSV,如下所示:
"range","itemPath","groupUserName","role"
"server1","/Test","CN\Group","Browser"
"server2","/Test","CN\Group","Browser"
"server3","/Test","CN\Group","Browser"
并像这样加载它:
Import-Csv 'C:\ReleaseSecurity.txt' | % {
Add-SSRSItemSecurity @_
}