微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

只有在某些指定的情况下才要求信用证

我试图用一堆函数创build一个模块,但是我遇到了一个问题:有时我需要运行与当前凭证不同的函数。 但事情是:如果我没有指定用户名,我不想要求凭证。 喜欢这个:

function MyFunction ($ComputerName='localhost',$UserName) { if ($UserName) { Get-WmiObject -Class Win32_OperatingSystem -ComputerName $ComputerName -Credential $UserName } else { Get-WmiObject -Class Win32_OperatingSystem -ComputerName $ComputerName } }

我能以某种方式摆脱if语句吗? 我可以让函数使用当前的凭据,除非我指定-UserName ?

如果我这样离开它:

Get-WmiObject -Class Win32_OperatingSystem -ComputerName $ComputerName -Credential $UserName

并且在不指定-UserName情况下调用一个函数,每次都要求凭证。 是的,如果我closures“get-cred”框,它会使用current,但这不是我想要的。

Powershell获取凭据失败

在命令行validation域凭据

获取Windows代理用户名/密码

PowerShell启动notepad.exe和命令窗口启动并消失

在“其他用户”磁贴上显示V2凭证提供程序

获取Stop-NlbClusterNode:找不到与参数名称“Credential”相匹配的参数。 停止节点时出现错误

Git凭据助手不起作用

我将如何在Powershell的每个循环中保存凭证

Powershell多个凭据设置

SO_PEERCRED vs SCM_CREDENTIALS – 为什么有两个呢?

您可以使用获取认凭证填充具有当前凭证的PSCredential对象,如下所示:

if ($UserName) { $cred = get-credential $username # this prompts for credentials } else { $cred=[PSCredential][System.Net.CredentialCache]::DefaultCredentials }

然后,只需要使用-credential $cred而无需构建if的墙。

编辑:显然,由于当前用户的PSCredential对象的密码为由同一用户的私钥加密的securestring ,如果能够从认凭证对象中获取PSCredential ,他将能够将密码解密为明文,所以这个洞存在,但最终关闭。 (也许让这个答案挂在这里,这样人们就不会像我那样得到asme的错误) 这个问题有关于这里产生的问题的标准答案。

另一种方法可能是使用splatting的变体,由Ansgar Wiechers详细解释,在这里只在单个if语句中构造凭证块,然后在需要的地方使用该块,而不是直接-credential参数。

$creds=@{} if ($UserName) { $cred = get-credential $username # this prompts for credentials $creds['Credential']=$cred }

然后在需要备用凭证的地方添加@creds:

Get-WmiObject -Class Win32_OperatingSystem -ComputerName $ComputerName @creds

这样,如果提供了$UserName ,那么您将被要求输入用户密码,然后$creds将为空或包含$UserName有效凭证,因此所有随后的if都可以通过显式添加@creds来替换。

您可以使用splatting来动态构建参数列表,但是您仍然需要一个if语句来决定是否添加-Credential参数:

function MyFunction ($ComputerName='localhost',$UserName) { $params = @{ Class = 'Win32_OperatingSystem' ComputerName = $ComputerName } if ($UserName) { $params['Credential'] = $UserName } Get-WmiObject @params }

你永远不会失去IF ,但你可以创建一个字符串,然后调用它作为和表达式:

如果$UserName是$null那么凭证参数将不会被添加到表达式中。

function MyFunction ([String]$ComputerName='localhost',[String]$UserName) { Invoke-Expression ("Get-WmiObject -Class Win32_OperatingSystem -ComputerName $ComputerName $(IF($UserName){'-Credential $UserName'})") }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐