我知道,通过参数,$using:foo我可以在 Powershell 7 及更高版本中运行时使用来自不同运行空间的变量ForEach-Object -Parallel。
但是如何将结果添加回变量呢?通用参数+=并$using:不会起作用。
例如:
$AllSubs = Get-AzSubscription
$Date = (Get-Date).AddDays(-2).ToString("yyyy-MM-dd")
$Costs = @()
$AllSubs | Sort-Object -Property Name | ForEach-Object -Parallel {
Set-AzContext $_.Name | Out-Null
Write-Output "Fetching Costs from '$($_.Name)' ..."
$using:Costs += Get-AzConsumptionUsageDetail -StartDate $using:Date -EndDate $using:Date -IncludeAdditionalProperties -IncludeMeterDetails -ErrorAction SilentlyContinue
}
Run Code Online (Sandbox Code Playgroud)
输出:
The assignment expression is not valid. The input to an assignment operator must be an object that is
| able to accept assignments, such …Run Code Online (Sandbox Code Playgroud) 我在 Powershell 中创建了一个函数,并希望将参数-Foo作为布尔值传递。
我已经简化了我的可视化用例:
function Get-Foobar {
[CmdletBinding()]
param (
[bool]$Foo
)
if ($Foo) {
Write-Host "Foo!"
}
else {
Write-Host "Bar!"
}
}
Run Code Online (Sandbox Code Playgroud)
当我调用函数时,该函数按预期工作Get-Foobar -Foo $true。但这不是我想要的。只是Get-Foobar -Foo应该足够了。
参考文档,在调用函数时指定参数应该已经返回true。但显然这行不通。
知道如何让 Switch 使用 Powershell 运行吗?
myscript.ps1 -Debug
Run Code Online (Sandbox Code Playgroud)
为该命令多次定义了名为“Debug”的参数。
我的脚本
[CmdletBinding()]
Param (
[switch]$Debug
)
if ($Debug) {
Start-Transcript -Path "Debug.log" -Append -Force
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 Powershell 和命令query user来获取当前连接的用户:
$Users = query user
if ($Users) {
return $true }
else {
return $false}
Run Code Online (Sandbox Code Playgroud)
这将工作正常,因为登录用户当前已连接:
但如果没有用户连接,我会收到预期的False+意外的错误:No User exists for *
我怎样才能抑制错误?
$ErrorActionPreference= 'SilentlyContinue'或$Users = query user -ErrorAction SilentlyContinue将不起作用,因为 query.exe 不接受 powershell 参数。
powershell ×4