我想检查变量是否为空:
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)
此代码基于:https://www.thomasmaurer.ch/2010/07/powershell-check-variable-for-null/,但这不起作用。
我该怎么解决这个问题?
ps。堆栈中有东西
将param块添加到函数中并使其成为强制性的。
Function New-Creds
{
[CmdletBinding()]
[Alias('nc')]
Param
(
[Parameter(Mandatory=$true,
HelpMessage = 'This is a required field. It cannot be blank')]$MyCredentials
)
# Code begins here
$MyCredentials
}
后果
New-Creds -MyCredentials
New-Creds : Missing an argument for parameter 'MyCredentials'. Specify a parameter of type 'System.Object' and try again.
At line:1 char:11
+ New-Creds -MyCredentials
+ ~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [New-Creds], ParameterBindingException
+ FullyQualifiedErrorId : MissingArgument,New-Creds
New-Creds
cmdlet New-Creds at command pipeline position 1
Supply values for the following parameters:
(Type !? for Help.)
MyCredentials: !?
This is a required field. It cannot be blank
MyCredentials: SomeCreds
SomeCreds
New-Creds -MyCredentials AnotherCred
AnotherCred
这按预期工作。您在参数中使用了[ref]。你可以把它看作一个指针。如果将变量传递给指针,指针将包含变量的地址。价值不重要。
[ref]不是指针,但概念是它是“系统管理,自动化”类型的对象。
PSReference类型的对象将在属性“Value”下保存所引用对象的实际值,当函数完成时,它会将值保存回原始变量。
如果在 if 语句中使用“变量的”值“属性,则代码将起作用:
function send_null_param ([ref]$mycredentials){
if (! $mycredentials.Value) {
Write-host 'Got no credentials'
$mycredentials = Get-Credential 'mydomain.com\myuserid'
}
else {Write-host 'Got credentials'}
}
$myidentifier=$null
send_null_param ([ref]$myidentifier)
我同意布里安特主义者,如果没有特殊的原因,你不应该使用[ref]。
由于您试图在缺少的情况下使用
获取凭证
分配$myCredential
,因此我假设您希望参数为[pscredentials]
。
在这种情况下,强烈键入您的参数,并将其标记为强制性的(顺便说一句,根本不需要
[ref]
:
function Get-MyCredential {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[PSCredential]
$Credential
)
Write-Host "Got credential with username '$($Credential.Username)'"
}
这样,您就真的不必进行任何检查。“使其成为强制”可让 PowerShell 为您强制执行该属性,并将其设置为
[PS 凭据]
可确保该对象从一开始就是有效的 [PS 凭据]
。
您可能想要检查的唯一其他情况是空凭据,具体取决于您使用凭据执行的操作。
为此,您可以将其与
[PSCredential]::Empty
进行比较,并且可以在验证属性中执行此操作,以便在参数绑定时完成:
function Get-MyCredential {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[PSCredential]
[ValidateScript( {
$_ -ne [PSCredential]::Empty
} )
$Credential
)
Write-Host "Got credential with username '$($Credential.Username)'"
}
如果需要,您可以在那里进行其他验证(检查某种用户名格式,例如是否需要电子邮件地址或其他内容)。如果它很复杂,则最好在功能主体内完成,具体取决于方案。
但是在大多数情况下,您可能根本不需要额外的验证。
问题内容: 有什么最短的方法吗? 如果我是正确的,应该用? 有可能,并且在一行中写(也许是数组?)而不重复? 问题答案: 如果要测试变量是否 确实 是,请使用标识运算符: 如果要检查是否未设置变量: 或者,如果变量不为空,则为空字符串,零,..: 如果要测试变量是否不是空字符串,也将足够:
问题内容: 如何检查变量是否为整数? 问题答案: 如果你需要这样做,请执行 除非你使用的是Python 2.x,否则需要 不要使用type。在Python中,这几乎永远不是正确的答案,因为它阻止了多态性的所有灵活性。例如,如果你子类化int,则你的新类应注册为int,但type不会这样做: 这符合Python强大的多态性:你应该允许行为类似于的任何对象int,而不是强制将其作为一个对象。 BUT
问题内容: 我想知道如何检查变量是否是类(不是实例!)。 我试图使用该函数来执行此操作,但我不知道类将具有哪种类型。 例如,在以下代码中 我试图用 ??? 代替“ ” ,但我意识到这是python中的关键字。 问题答案: 更好的是:使用该功能。
问题内容: 当我的函数f用一个变量调用时,我想检查var是否是一个熊猫数据框: 我想解决方案可能很简单,但即使 我无法使其按预期工作。 问题答案: 使用,没有别的: PEP8明确表示这是检查类型的首选方法 而且甚至不用考虑 处理继承(请参见type()和isinstance()之间的区别?)。例如,它会告诉你,如果一个变量是一个字符串(或),因为他们从派生) 专门针对 对象:
问题内容: 假设我有任何变量,定义如下: 我想要一个检查变量类型是否像函数一样的函数。即: 如何检查变量是否为上述定义的类型? 问题答案: 当然,下划线的方式效率更高,但是当效率不是问题时,最好的检查方法是写在@Paul Rosania链接的下划线页面上。 受下划线启发,最终的isFunction函数如下:
问题内容: 我该如何做: 健康)状况? (或某些原因,因为我很确定我刚才写的东西是完全错误的) 我正在尝试检查列表中的a是(空白)还是包含。 问题答案: 您可以将您的字符串与空字符串进行比较: 但是您可以将其缩写为: 说明:An通过为您提供的逻辑表达式计算值来实际起作用:或。如果仅使用变量名(或诸如“ hello”之类的文字字符串)而不是逻辑测试,则规则是:空字符串计为False,所有其他字符串计