Powershell命令执行顺序问题

时间:2019-03-28 13:32:20

标签: powershell

我是学习Powershell的新手,遇到一个让我发疯的问题。我想编写一个简单的Powershell脚本,该脚本可用于获取某些ActiveDirectory用户的组成员身份以及某些ActiveDirectory组的用户,最后提供了在控制台上写入结果或保存结果的选项作为csv。 一切工作都很好,除非我做任何事情,否则在将结果写入控制台后,我无法阻止窗口立即关闭。我知道我可以通过命令行运行PS1,但不允许关闭窗口,但是我希望Powershell自己完成。

我尝试在查询脚本之后使用“暂停”和“读取主机”,但是无论结果在控制台上的顺序如何,停止事件总是在结果出现在控制台之前发生。我根本无法理解为什么这两个命令的执行顺序是向后的。您能否给我一些见解,为什么Powershell会这样做?

$nameofgroup = Read-Host -Prompt "`nPlease enter the name of the group!`n"
Get-ADGroupMember -identity $nameofgroup | Get-ADObject -Properties description, samAccountName | select @{n='Name'; e='name'}, @{n='Description'; e='description'}, @{n='Username'; e='samAccountName'}
$temp = Read-Host "Press Enter to continue..."

1 个答案:

答案 0 :(得分:0)

因此,您需要显式告诉powershell输出字符串。我还为您添加了一些错误处理,因此您不必每次都运行脚本。就像是该组键入错误或不存在一样。

Do
{
    $nameofgroup = Read-Host -Prompt "`nPlease enter the name of the group!`n"

    try
    {
        Get-ADGroupMember -identity $nameofgroup | Get-ADObject -Properties description, samAccountName | select @{n='Name'; e='name'}, @{n='Description'; e='description'}, @{n='Username'; e='samAccountName'} | Out-String
        $errorMessage = 'False'
        Read-Host -Prompt 'Press Enter key to exit'
    }
    catch
    {
        Write-Host "Could not find group please try again"
        $errorMessage = 'True'
    }
}
while($errorMessage -eq 'True')