我的计算机上同时安装了 PowerShell 5.1 和 PowerShell 7.0。如何为给定脚本(在本例中为 PowerShell 7.0)强制执行 PowerShell 的强制版本(特定版本,而不是最低或最高版本)?
有相当详细的记录表明,foreach 处理速度根据 foreach 循环的执行方式而变化(从最快到最慢排序):
.ForEach() 方法continue声明,而 #1 没有
return是如何“continue使用”.ForEach()方法时。.ForEach()太大而难以满足foreach而您又需要时,正确的使用continue方法是什么?continue.ForEach({})return在方法内部使用时,您应该注意哪些含义或陷阱.ForEach()?简而言之,有没有办法从 shell 确定PSProvider 的路径是否有伴随变量,如果有,该变量的名称是什么?此处列出了支持此表示法的内置 PowerShell 提供程序,但我指的是一般提供程序 - 内置/第三方/自定义等。提供程序的驱动器名称(可以通过Get-PSProvider) 总是与其变量符号名称相同?
例如:
环境提供程序使用Env:也可以使用其变量访问的驱动器$env:
证书提供程序使用的Cert:驱动器也可以使用其变量进行访问$cert:,但没有实现IContentCmdletProvider 接口 - 如引用路径时在 shell 中触发的以下错误消息所示$Cert:xyz(但我可以使用CTRL+Space和tab自动完成$cert:路径)
提供程序“证书”不能用于使用变量语法获取或设置数据。无法使用接口。该提供程序未实现 IContentCmdletProvider 接口。
这(下面引用)是否意味着每个提供程序的驱动器自动使用变量符号(并且始终具有相应的变量),但并非所有提供程序驱动器都能够通过提供程序的变量语法公开/操作其内容/项目?
“您可以使用美元 ($) 符号为提供程序路径添加前缀,并访问实现 IContentCmdletProvider 接口的任何提供程序的内容。”
最后,以下说法是否准确?
询问“是否有办法从 shell 确定 PSProvider 是否实现了IContentCmdletProvider接口?” 可能不足以确定是否可以使用其变量符号来访问/操作提供者的驱动器内容。
考虑以下示例:
\n$nullforeach ($n in $null) {'This is a $null test'}\n(no output)\n\n$null | ForEach-Object {'This is a $null test'}\nThis is a $null test\n\n$null -in $null\nTrue\n\n$null -contains $null\nTrue\nRun Code Online (Sandbox Code Playgroud)\n\xc2\xa0\n
[int]1foreach ($n in [int]1) {'Test'}\nTest\n\n[int]1 | ForEach-Object {'Test'}\nTest\n\n[int]1 -in [int]1\nTrue\n\n[int]1 -contains [int]1\nTrue\nRun Code Online (Sandbox Code Playgroud)\n
\n由于 $null 是一个不包含任何内容的标量值,因此在第二个 $null 示例中,$null 将沿着管道发送一个“nothing”的单个实例,这解释了输出。
$null为什么即使$null -in $null返回也不能作为集合进行迭代True作为集合进行迭代?
假设我有一个类似的函数:
function Authenticate
{
param
(
[ValidateSet('WindowsAuthentication','UsernameAndPassword')]
[string]$AuthenticationType,
[Parameter(ParameterSetName='ParamSet1')]
[string]$Username,
[Parameter(ParameterSetName='ParamSet1')]
[string]$Password
)
..
}
Run Code Online (Sandbox Code Playgroud)
我想执行这些规则:
ParamSet1如果出现以下情况,则强制设置参数$AuthenticationType = 'UsernameAndPassword'ParamSet1如果$AuthenticationType = 'WindowsAuthentication'这可能吗?