如何在Powershell脚本中添加凭据?我编写了一个默认情况下使用我的域凭据的脚本。我想使用其他凭据,并想在Powershell语法中添加凭据参数,当我使用凭据参数时,它会提示您输入凭据。
答案 0 :(得分:1)
您可以在脚本中指定参数:
param(
[System.Management.Automation.PSCredential]
$Credential = $(Get-Credential)
)
如果您传递有效的PSCredential
对象,则它将照常进行,脚本可以使用凭据:
$cred = Get-Credential
.\MyScript.ps1 -Credential $cred
如果您未传递任何凭据,则用户将看到标准的UI凭据提示。
答案 1 :(得分:1)
我可能会做这样的事情:
[CmdletBinding()]
Param(
[Parameter(Mandatory=$false)]
$Credential = $null
)
if ($Credential -is [String]) {
$Credential = Get-Credential $Credential
}
如果将凭据对象传递给脚本,它将使用该对象:
$cred = Get-Credential
.\script.ps1 -Credential $cred
如果将字符串传递给脚本,它将提示输入密码:
.\script.ps1 -Credential 'username'
如果调用不带-Credential
参数的脚本,则参数值为$null
:
.\script.ps1
如果您不想将参数传递给参数,而只希望它指示是否提示输入凭据,则可以将其设置为切换参数:
[CmdletBinding()]
Param(
[Parameter(Mandatory=$false)]
[switch]$Credential
)
if ($Credential.IsPresent) {
$cred = Get-Credential
}
我认为不可能有一个参数-Credential
使用和不使用参数,除非您将其作为一个参数集中的开关参数和另一参数集中的“常规”参数使用。不过,那将需要可区分的参数集。
我也不认为完全可以在参数定义中做到这一点,至少对于静态参数而言。不确定动态参数。
答案 2 :(得分:0)
正如其他答案所指出的那样,只需在脚本的PARAM块中添加$ Credential参数。这个答案提供了一些更多细节,您可以添加一些其他东西来使事情变得有趣。
Param (
[Parameter()]
[ValidateNotNull()]
[System.Management.Automation.PSCredential]
[System.Management.Automation.Credential()]
$Credential = [System.Management.Automation.PSCredential]::Empty
)
PARAM ( <# ... #> )
定义了一个逗号分隔的可能参数列表。在这种情况下,我们只有1个参数:$Credential
。[Parameter()]
指出这是一个参数。我们可以在此处创建规则(例如,将字段设为必填字段,或仅在某些参数集中可用等)。如本例中未指定任何内容时,它并不是真正需要的,但为了完整性起见,将其包括在内。有关详细信息,请参见https://docs.microsoft.com/en-us/powershell/developer/cmdlet/parameter-attribute-declaration。[ValidateNotNull()]
-确保没有将$null
分配给参数,因为如果未明确处理,可能会导致意外行为。 [System.Management.Automation.PSCredential]
定义此参数的类型;即它是PSCredential class的实例。[System.Management.Automation.Credential()]
-这是type converter;负责使PS对其接受的内容具有帮助/智能,而不是坚持接收PSC凭据。即,如果您将字符串-Credential 'username'
传递给参数,则该行将使PowerShell将该字符串转换为PSCredential,并提示输入相关密码。$Credential
-这是参数的名称。= [System.Management.Automation.PSCredential]::Empty
-如果在运行时未传递任何值,则在此处分配默认值。如果您尝试访问类型的属性(例如,$Credential.Username.Length
不会引发异常),则空值避免了空异常问题,并且通常理解为“使用当前会话的凭据运行”(尽管不是)保证/并非总是适用,具体取决于上下文/您正在使用的功能/模块)。假设您的脚本另存为MyScript.ps1
并且位于当前工作目录中,则可以执行任何一个(或更多)操作。
.\MyScript.ps1
-由于凭据不是强制性的,因此默认为空凭据;通常表示“以当前用户身份运行”。.\MyScript.ps1 -Credential 'myDomain\myUser'
将提示用户输入给定帐户的密码(用户也可以通过相同的提示来修改帐户).\MyScript.ps1 -Credential $credential
-将预先分配的凭据对象(例如通过$credential = Get-Credential
创建的)传递给脚本。这里有一篇很棒的博客文章,其中有更多详细信息:http://duffney.io/AddCredentialsToPowerShellFunctions
注意:相同的方法适用于任何PARAM块。即可以将其添加到PS1文件的开头,以便脚本获取参数,添加到该函数获取参数的函数或脚本块(例如,作为变量保存的脚本)。有关更多信息,请参见http://www.powertheshell.com/bp_function_parameters/。