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

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

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

我试图用一堆函数创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'})") }

总结

以上是内存溢出为你收集整理的只有在某些指定的情况下才要求信用证全部内容,希望文章能够帮你解决只有在某些指定的情况下才要求信用证所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1257136.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存