phi*_*-oz 2 powershell null parameter-passing
我想检查一个变量是否为空:
function send_null_param ([ref]$mycredentials){
if (! $mycredentials) {
Write-Host 'Got no credentials'
$mycredentials = Get-Credential 'mydomain.com\myuserid'
} else {
Write-Host 'Got credentials'
}
}
$myidentifier = $null
send_null_param ([ref]$myidentifier)
Run Code Online (Sandbox Code Playgroud)
此代码基于: https://www.thomasmaurer.ch/2010/07/powershell-check-variable-for-null/,但这不起作用。
我怎样才能解决这个问题?
附:Stack Overflow 中有一些字符串为 null 但不是更通用的内容: 检查字符串是否为 NULL 或 EMPTY
由于您在不存在的情况下尝试分配$myCredentialwith Get-Credential,因此我假设您希望您的参数是[PSCredential].
在这种情况下,强烈键入您的参数,并将其标记为必需的(顺便说一句[ref],根本不需要:
function Get-MyCredential {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[PSCredential]
$Credential
)
Write-Host "Got credential with username '$($Credential.Username)'"
}
Run Code Online (Sandbox Code Playgroud)
这样,您根本不需要进行任何检查。使其成为强制性允许 PowerShell 为您强制执行,并[PSCredential]确保对象[PSCredential]从一开始就有效。
根据您对凭证的处理方式,您可能想要检查的唯一其他情况是空凭证。
为此,您可以将其与 进行比较[PSCredential]::Empty,并且您可以在验证属性中执行此操作,以便在参数绑定时完成:
function Get-MyCredential {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[PSCredential]
[ValidateScript( {
$_ -ne [PSCredential]::Empty
} )
$Credential
)
Write-Host "Got credential with username '$($Credential.Username)'"
}
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以在其中进行其他验证(检查特定的用户名格式,例如它是否需要是电子邮件地址或其他内容)。如果它很复杂,最好在函数体内完成,这取决于场景。
但在大多数情况下,您可能根本不需要额外的验证。
| 归档时间: |
|
| 查看次数: |
9953 次 |
| 最近记录: |