为PowerShell动态创建参数参数';让我们去拿儿童用品
长话短说,我试图在PowerShell的为PowerShell动态创建参数参数';让我们去拿儿童用品,powershell,get-childitem,Powershell,Get Childitem,长话短说,我试图在PowerShell的获取ChildItem中动态使用参数-Directory或-File。你猜怎么着?我不能 交易如下(注意:伪代码): $Using:mode是它抛出错误的地方,或者: PS C:\Users\janreilink> v:\test.ps1 vevida-optimizer file look for: 'vevida-optimizer' A positional parameter cannot be found that accepts argu
获取ChildItem
中动态使用参数-Directory
或-File
。你猜怎么着?我不能
交易如下(注意:伪代码):
$Using:mode
是它抛出错误的地方,或者:
PS C:\Users\janreilink> v:\test.ps1 vevida-optimizer file
look for: 'vevida-optimizer'
A positional parameter cannot be found that accepts argument '-File'.
+ CategoryInfo : InvalidArgument: (:) [Get-ChildItem], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
+ PSComputerName : webserver-01.example.net
或
整个下午我都在读关于动态参数集的书,但我还不能完全理解它。任何要点都非常(非常、非常)受欢迎。您将希望使用它来代替。首先创建一个哈希表,其中包含一些或所有要传递的参数:
$dynamicArgs = @{}
if( $type -eq "file" ) {
$dynamicArgs['File'] = $true
}
elseif( $type -eq "directory" ) {
$dynamicArgs['Directory'] = $true
}
然后,在Invoke命令
中,在变量名前面加上@
前缀,表示要“splat”参数:
Get-ChildItem -Path "z:\www" -Depth 5 @Using:dynamicArgs -Filter $Using:filter -Recurse
如果splatting表包含值为
$true
的键文件
,则相当于在命令行上添加-File:$true
,反之亦然,对于目录
参数,另一种方法可能是从字符串创建scriptblock<代码>$scriptBlock=[scriptBlock]::创建($string)这正是我需要的,谢谢。标记为答案的答案。
$dynamicArgs = @{}
if( $type -eq "file" ) {
$dynamicArgs['File'] = $true
}
elseif( $type -eq "directory" ) {
$dynamicArgs['Directory'] = $true
}
Get-ChildItem -Path "z:\www" -Depth 5 @Using:dynamicArgs -Filter $Using:filter -Recurse