powershell 多次使用写主机[复制]

7dl7o3gd  于 2023-08-05  发布在  Shell
关注(0)|答案(2)|浏览(105)

此问题已在此处有答案

PowerShell output is crossing between functions(1个答案)
上个月关门了。
我正在尝试编写一个PowerShell脚本,将使用Write-Host命令几次。当我运行脚本时,我得到Write-host的输出,然后是命令本身的输出。我已经看过和谷歌这个问题,但没有喜悦。这是剧本,如果有人可以帮助?

#Use this script to find all acounts in the External Contractors OU with accounts that have expired and will expire with in the next 365 days

$cred = Get-Credential

Write-Host "Accounts due to expire in the next 365 days" -ForegroundColor red -BackgroundColor white
Search-ADAccount -Server teeis0002.europe.tel.com -Credential $cred `
    -searchbase "OU=External Contractors,OU=Users,OU=xxxxxx,DC=xxxxxx,DC=xxxxxx,DC=xxxxx" `
    -AccountExpiring -TimeSpan 365.00:00:00 -UsersOnly -ResultPageSize 2000 -resultSetSize $null | 
    Select-Object Name, UserPrincipalName, DistinguishedName, AccountExpirationDate | 
    Sort-Object -Property AccountExpirationDate

Write-Host "Currently Expired Accounts"  -ForegroundColor red -BackgroundColor white
Search-ADAccount -Server teeis0002.europe.tel.com -Credential $cred `
    -searchbase "OU=External Contractors,OU=Users,OU=xxxxxx,DC=xxxxxx,DC=xxxxxx,DC=xxxxx" `
    -AccountExpired  -UsersOnly -ResultPageSize 2000 -resultSetSize $null | 
    Select-Object Name, UserPrincipalName, DistinguishedName, AccountExpirationDate | 
    Sort-Object -Property AccountExpirationDate

字符串
我研究了使用Do While和For each

xriantvc

xriantvc1#

如果你想强制命令管道的输出在其他任何事情发生之前呈现在屏幕上,可以通过管道传输到Out-Host

Write-Host "Message 1"
Search-ADAccount ... |Out-Host

Write-Host "Message 2"
Search-ADAccount ... |Out-Host

字符串

mqkwyuun

mqkwyuun2#

如果我对您的问题理解正确的话,您希望抑制除Write-Host行以外的所有命令输出。
在PowerShell中,您有几个选项:
1.您可以将Cmdlet结果保存到变量。如果您怀疑在脚本的后面可能需要这些信息,这通常是有意义的,例如。

# outputs a System.IO.DirectoryInfo object
# which it outputs to the terminal
New-Item -ItemType Directory -Name Test

# captures the output in a variable
# hence, you will see no output in the terminal
$Folder = New-Item -ItemType Directory -Name Test

字符串
1.你也可以使用[void](Verb-Noun)来保持你的终端屏幕干净,这会将输出转换为void。实际上有很多不同的方法可以做到这一点,虽然它们在技术上可能不做完全相同的事情,但对于所有意图和目的,它都在做你想要它做的事情:

# cast to null
[void](New-Item -ItemType Directory -Name Test)

# redirect output to null
New-Item -ItemType Directory -Name Test > $null

# use a Cmdlet to pipe to null (standard output only)
New-Item -ItemType Directory -Name Test | Out-Null


但是有时候,如果您还想抑制错误消息,那么这可能还不够(尽管您应该仔细考虑这是否是您真正想要做的事情,但这不是这里的重点)。
错误消息应该写入错误流。你可以阅读更多关于流here .

# just redirect the error stream to null
Verb-Noun 2>$null

# redirect success and error stream to null
Verb-Noun 2>&1>$null

# redirect every stream to null
Verb-Noun *>$null

相关问题