我试图从同一个域中的100多台服务器上提取所有网站和绑定并在其上运行IIS(已经在txt文件中列出了这些服务器,因此AD搜索不是&# 39; t需要)。当我远程登录并在服务器上运行代码时,这是从一台服务器成功提取它的代码:
$myObject = @()
{
Foreach ($Site in get-website)
{
Foreach ($Bind in $Site.bindings.collection)
{
$myObject+=[pscustomobject]@{serverName = $vm;name=$Site.name;Protocol=$Bind.Protocol;Bindings=$Bind.BindingInformation; path=$Site.physicalPath}
}
}
} $myObject | export-csv -Path C:\results.csv -NoTypeInformation
我遇到的问题是当我创建下面列出的foreach循环时
$servers = (Get-Content results.txt)
foreach ($vm in $servers)
并在上面脚本的顶部运行它,csv表只显示来自我运行它的服务器的站点/绑定的重复,而不是从txt文件中列出的每个唯一服务器中提取结果。
从每台服务器获取结果的最佳方法是什么?我通过我的凭据获得完全管理权限,当我登录服务器时,几乎所有服务器都运行Windows 2012.
答案 0 :(得分:-1)
Get-Website
本身不支持远程连接,因此您需要使用PowerShell远程处理在所有服务器上运行它。像这样:
Invoke-Command -Computer (Get-Content results.txt) `
-ScriptBlock {
Get-Website |
ForEach-Object {
$site = $_
$_.bindings.collection |
ForEach-Object {
[pscustomobject]@{
serverName = $env:COMPUTERNAME
name=$site.Name
Protocol=$_.Protocol
Bindings=$_.BindingInformation
path=$site.PhysicalPath
}
}
}
} | Export-Csv -Path C:\results.csv -NoTypeInformation