PowerShell脚本将域用户添加到多个服务器,并显示结果(成功/失败)

5vf7fwbs  于 2023-06-29  发布在  Shell
关注(0)|答案(1)|浏览(107)

我是一个PowerShell新手,我遇到了脚本问题。基本上,我已经创建了一个脚本,它将向文本文件中列出的多个SQL服务器添加一个sysadmin。文本文件只是服务器名称的一列。剧本似乎很好。
我想有一个报告,说明如果它在列表中的任何服务器失败。这可以是CSV或文本。我只是不想假设脚本在100多台服务器上运行良好,然后才发现帐户或服务器有问题。
这是我使用的脚本:

Import-Module -Name SqlPs
$servers = Get-Content -Path C:\Temp\servers.txt
$servers |
   foreach{ `
      Invoke-Sqlcmd -ServerInstance $_ `
            -Database 'Master'  `
            -Query "EXEC master..sp_addsrvrolemember @loginame = N'DOMAIN\USERNAME', @rolename = N'sysadmin';" `
            -QueryTimeout 10 `
   }

如有任何协助,将不胜感激。

jvidinwx

jvidinwx1#

我建议将你的命令 Package 在一个try/catch块中来聚合失败:

Import-Module -Name SqlPs

$errors = [System.Collections.Generic.List[string]]@()

$params = @{
    Database     = 'Master'
    Query        = "EXEC master..sp_addsrvrolemember @loginame = N'DOMAIN\USERNAME', @rolename = N'sysadmin';"
    QueryTimeout = 10
    ErrorAction  = 'Stop'
}
foreach ($server in Get-Content -Path C:\Temp\servers.txt) {
    try {
        Invoke-Sqlcmd -ServerInstance $server @params
    } catch {
        $errors.Add("$server failed: $_")
    }
}

$errors > errors.log

这里最重要的是ErrorAction:Stop,它会把你的命令变成一个 terminating 错误,并被try/catch块捕获。

相关问题