是否可以使用cmdlet作为动态PowerShell脚本的输入参数?
这里是我正在尝试使用的测试脚本,我从一个单独的进程调用它并尝试将参数传递给它。这个想法是,我有一个用户界面,允许用户选择一个CmdLet,然后用该CmdLet的属性/方法填充另一个下拉列表。是否可以使用cmdlet作为动态PowerShell脚本的输入参数?
我的问题似乎是,脚本将输入参数呈现为一个字符串,并且因此正在创建一个文本文件,其中包含您应用“Get-Member”的任意任意字符串的方法和属性如“克隆”或“CompareTo”。唯一的财产是“长度”。
有没有办法让输入参数作为可用的CmdLet而不是字符串?也许我错过了一些东西,或许我试图做的事情是不可能的。
param([string]$inputCmdLet = "Get-NetAdapter"); $wrkgDir = "D:\Distribution\Operational";
# Get Properties and Methods for CmdLet Input Parameter
$propertyNames = $inputCmdLet | Get-Member -MemberType Property;
$methodNames = $inputCmdLet | Get-Member -MemberType Method;
# Sort Arrays
$propertyNames = $propertyNames | Sort-Object Name;
$methodNames = $methodNames | Sort-Object Name;
# Output Results to Text Files
$propertyNames.Name | Out-File $wrkgDir\$inputCmdLet.Properties.txt;
$methodNames.Name | Out-File $wrkgDir\$inputCmdLet.Methods.txt;
编辑更多信息:
输出我希望的,在获取-NetAdapter的例子,是其他同一个输出文件的属性和方法的列表。现在做什么我得到的是:
Left list is expected (partial) result, right list is actual result.
我不确定如何实现左边的结果列表(图中)编程。我可以通过键入了静态来获取正确的输出:
$mbrNameStatic = Get-NetAdapter | Get-Member; $mbrNameStatic.Name | Out-File $wrkgDir\$inputCmdLet.Strings.txt;
但是当我使用的输入参数,它在合并为一个字符串值,如此看来实际运行时代码看起来更像是这个:
$propertyNames = "Get-NetAdapter" | Get-Member -MemberType Property;
所以加引号的呈现cmdlet将作为字符串(很有道理我想,因为我的输入参数是一个字符串),它返回的属性和一个字符串,而不是cmdlet的方法。有没有办法让cmdlet不用引号渲染出来?
请让我知道,如果我没有理解这个,无论是我的描述,还是完全的想法。
谢谢!
回答:
为了执行其名(只)被存储在一个变量或名字以单或双引号中指定的命令,你必须使用&
,该电话运营商。
# WRONG: The token is interpreted as an *expression* that outputs a *string* "Get-NetAdapter" # outputs the [string] literal
# WRONG: ditto, via a variable
$name = "Get-NetAdapter"
$name # outputs the contents of the [string] variable
# OK: Use of & tells Powershell to interpret the next token as a *command* to *invoke*.
& "Get-NetAdapter"
& $name
至于你的一般方法:
注意,不带参数调用时不是所有的cmdlet产生的输出,所以你当前的代码(即使
&
)将无法正常工作与所有cmdlet一起使用。相反,那些服用时不产生输出的cmdlet没有参数可能会产生很多人,这是不必要的,因此可以考虑像
& $inputCmdlet | Select-Object -First 1
。一般地,你可以使用像
(Get-Command Get-NetAdapter).OutputType
获得cmdlet的输出类型,但要注意的是:声明的输出类型是可选,所以不是所有的cmdlet可能会返回一个值。
如果你开始与比该类型的实例一个型评价人,你不能使用
Get-Member
来发现实例成员(你只能通过-Static
获得静态成员)。
以上是 是否可以使用cmdlet作为动态PowerShell脚本的输入参数? 的全部内容, 来源链接: utcz.com/qa/259304.html