无论是否提供凭证,我都可以使用相同的WMI命令吗?
WMI命令可以接收显式凭据作为参数(-Credential
标志),或者在未提供凭据的情况下在运行脚本的用户的安全上下文中运行。无论是否提供凭证,我都可以使用相同的WMI命令吗?
现在,我的剧本是这样的:
if ($Creds) { # if the user provided credentials
Invoke-WMIMethod -Credential $Creds <...something...>
... hundreds more lines of Invoke-WMIMethod code ...
else { # user did not supply credentials, use current security context
Invoke-WMIMethod <...something...>
... same exact hundreds of lines of Invoke-WMIMethod code, without -Credential ....
}
换句话说,唯一的区别是-Credential
标志。有什么方法可以将这个巨大的if-else合并到一个代码块中吗?
使用splatting的动态参数传递给cmdlet的,就像这样:
$params = @{
'Class' = 'Win32_Foo'
'ComputerName' = 'bar'
...
}
if ($cred) {
$params['Credential'] = $cred
}
Invoke-WmiMethod @params
或像这样:
$optional_params = @{}
if ($cred) {
$optional_params['Credential'] = $cred
}
Invoke-WmiMethod -Class Win32_Foo -Computer bar ... @optional_params
它看起来并不像当前安全上下文可用作凭证对象(ref this question)。
幸运的是,invoke-wmimethod使用凭证属性似乎表现得好像在提供空值时未指定它一样。因此,如果$cred
为空,那么invoke-wmimethod -credential $cred <...something...>
的行为应该与invoke-wmimethod <...something...>
的行为相同。
现在,更好的做法可能是保留if else
并删除任何重复的代码。因此,而不是:
if ($Creds) { # if the user provided credentials
Invoke-WMIMethod -Credential $Creds <...something...>
... hundreds more lines of code ...
else { # user did not supply credentials, use current security context
Invoke-WMIMethod <...something...>
... same exact hundreds of lines of code ....
}
你必须:
if ($Creds) { # if the user provided credentials
$myresults = Invoke-WMIMethod -Credential $Creds <...something...>
else { # user did not supply credentials, use current security context
$myresults = Invoke-WMIMethod <...something...>
}
... hundreds more lines of code using $myresults...
那么,它会产生50次凭据的弹出式提示(每个Invoke-WMIMethod命令一个,我想象一下)。所以这不会工作。但是,一旦我取消了所有这些,似乎会产生预期的产出。有没有办法我可以禁用提示,或者(更好)提供一个不会产生提示的值? – AlwaysQuestioning
如果用户不提供证书,可以尝试将'$ Cred'变量设置为'$ null'。 –
也没有工作。我会继续寻找解决方案。 – AlwaysQuestioning
因此,使用第二个例子,如果我在每个'Invoke-WMIMethod'的末尾添加了'@ optional_params',那么它只会添加'-Credential $ Cred',如果我给它赋值像你一样? – AlwaysQuestioning
你如何才能*尝试*看看自己? –
我问的原因是因为性能影响。我想这比其他解决方案增加了更多的开销。 – AlwaysQuestioning