【发布时间】:2020-04-01 03:34:03
【问题描述】:
我有 2 个 Powershell 脚本,一个是主脚本 (ServerInfo.ps1),另一个是用作包装器的辅助脚本,在循环中启动第一个脚本,由于查询,该脚本将在每个循环上使用不同的凭据被制作到不同的 AD 域/森林,每个域需要不同的域信用。
如果我从各个域中的机器手动和本地运行主脚本并根据需要运行(从远程机器获取详细信息并导出到 csv),则主脚本在单独运行时运行良好
以下是 Wrapper 脚本(出于安全原因更改了域名示例)。
# This is a Wrapper Script for ServerInfo.ps1
$username = Read-Host -Prompt 'Enter User Account to be used - Do not specify domain'
$Password = Read-Host -Prompt 'Input User Password - NOTE must be the same on all domains' -AsSecureString
$domains = "d1.contoso.com","d2.contoso.com","dev.contosodev1.com","test.contosotest1.com"
$Arguments = "-file c:\serverinfo\ServerInfo.ps1", "-ServerType 'DCs'"
ForEach ($domain in $domains) {
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "$domain\$username", $Password
Start-Process powershell.exe -Credential $credential -NoNewWindow -ArgumentList $Arguments -WorkingDirectory 'c:\Serverinfo\' -Wait
}
具体而言,这将用于查询具有在每个域上都相同的提升权限帐户的域控制器,因为在成员计算机上使用的帐户在域控制器上没有内置管理员或 AD(域/企业管理员)级别权限.目的也是从域成员运行脚本,而不是在 DC 上本地运行。
由于主脚本 (serverinfo.ps1) 超过 1000 行代码,我将简单地说,通过传递参数“-ServerType DCS”的包装器,ServerInfo.ps1 最初从相应的 AD 中获取所有域控制器名称帐户所属的域,并执行每个 DC 的 WMI 和注册表查询等操作,将输出导出到 CSV 文件。
对于第一个域,它运行良好,没有任何问题,并且 ServerInfo.ps1 脚本可以查询第一个域中的每个 DC,但随后两个 PowerShell 脚本都关闭/停止运行,而不会继续运行到包装器中的第二个域又名循环,一旦第一个域完成,“foreach ($Domain in $Domains)”循环就不起作用了。
由于我在包装器中没有看到任何脚本错误,并且 ServerInfo.Ps1 中没有退出或其他取消/完成命令,我不知道为什么包装器没有按预期工作。
【问题讨论】:
标签: powershell loops foreach wrapper