Я использую скрипт для получения информации о версии ОС Windows из списка удаленных машин. Я хочу добавить имена хостов компьютеров в вывод.
Мне удалось создать заголовок «ComputerName» в выводе таблицы, но в кусте реестра, на который я смотрю, нет фактического имени компьютера или свойства имени хоста. Я некоторое время возился с этим, пытаясь понять это, но ничего не получаю.
Write-Host "Please select the machine list"
Function Get-FileName($InitialDirectory) {
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$OpenFileDialog.initialDirectory = $initialDirectory
#$OpenFileDialog.filter = "CSV (*.csv)| *.csv|TXT (*.txt)| *.txt"
$OpenFileDialog.ShowDialog() | Out-Null
$OpenFileDialog.filename
}
$inputfile = Get-FileName "C:"
$Computer = get-content $inputfile
Invoke-Command -ComputerName $Computer {
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
} | Format-Table -Property ComputerName, ProductName, ReleaseId
Это то, что я получаю
ComputerName ProductName ReleaseId
------------ ----------- ---------
Windows 10 Enterprise 1709
Кто-нибудь знает, как я могу заполнить столбец Computername машинами в моем списке компьютеров?
Invoke-Command
автоматически добавляет свойство PSComputerName
при таком запуске. Используйте PSComputerName
вместо ComputerName
.
Lee_Dailey и TheMadTechnician. И то, и другое помогло. Теперь я получаю результат, который хотел. Спасибо вам обоим!
Invoke-Command
автоматически добавляет свойство PSComputerName
при таком запуске. Используйте PSComputerName
вместо ComputerName
.
Write-Host "Please select the machine list"
Function Get-FileName($InitialDirectory) {
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$OpenFileDialog.initialDirectory = $initialDirectory
#$OpenFileDialog.filter = "CSV (*.csv)| *.csv|TXT (*.txt)| *.txt"
$OpenFileDialog.ShowDialog() | Out-Null
$OpenFileDialog.filename
}
$inputfile = Get-FileName "C:"
$Computer = get-content $inputfile
$Results = Invoke-Command -ComputerName $Computer {
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
}
$Results | Format-Table -Property PSComputerName, ProductName, ReleaseId
Я также рекомендую записывать результаты, а затем передавать их в Format-Table
, чтобы результаты можно было снова использовать для вывода в файл или что-то еще, или фильтровать, или сортировать.
обычный способ - НЕ использовать проблемные
Format-*
командлеты и использовать либоSelect-Object
, либо, что лучше, создать собственный объект. [ухмылка] просто сделайте так, чтобы ваш скриптовый блок создал пользовательский объект и вернул его. если вам нужна демонстрация идеи, я могу опубликовать ее в качестве ответа.