Войти

Показать полную графическую версию : Вывод двух команд в один фаил


sap87@vk
23-09-2022, 14:12
Приветствую всех. Пишу небольшие скрипты столкнулся с проблемой. Не получается объединить вывод двух команд в один результат
Invoke-Command -ComputerName $computername -ScriptBlock{Get-ComputerInfo -Property WindowsVersion|Get-WmiObject -Class Win32_ComputerSystem} |Select-Object PSComputerName, WindowsVersion, UserName |Export-Csv 1.csv -Append
Вылезает ошибка:
Не удается привязать объект ввода к любым параметрам команды, так как команда не принимает входные данные конвейера, либо входные данные и их свойства не совпадают с любыми из параметров, принимающих входные данные конвейера.
+ CategoryInfo : InvalidArgument: (@{WindowsVersion=1909}:PSObject) [Get-WmiObject], ParameterBindingException
+ FullyQualifiedErrorId : InputObjectNotBound,Microsoft.PowerShell.Commands.GetWmiObjectCommand

Подскажите в чем ошибка и как исправить. Суть в csv имя ПК версия ос и залогененый пользователь

DJ Mogarych
23-09-2022, 15:01
Вы пытаетесь передать Get-WmiObject данные из Get-ComputerInfo, что, естественно, работать не будет, т. к. Get-WmiObject так не умеет.

Get-ComputerInfo -Property WindowsVersion|Get-WmiObject -Class Win32_ComputerSystem

См. статью о конвейерах (https://learn.microsoft.com/ru-ru/powershell/module/microsoft.powershell.core/about/about_pipelines?view=powershell-7.2).

В каком виде должна быть "версия ОС"?

sap87@vk
26-09-2022, 15:44
Мне нужно узнавать версию сборки. мне просто чтоб в одну строку выводило

DJ Mogarych
26-09-2022, 22:52
Вот так попробуйте:

Invoke-Command -ComputerName $computername -ScriptBlock {
"$($env:computername);$((Get-ComputerInfo -Property WindowsVersion).windowsversion);$((gwmi -Class Win32_ComputerSystem).username)" |
ConvertFrom-Csv -Delimiter ';' -Header PSComputerName,WindowsVersion,UserName
} |Export-Csv c:\temp\1.csv -Append -NoTypeInformation

Не тестировал, т. к. удалённой машины под рукой нет.

YuS_2
27-09-2022, 08:06
нужно узнавать версию сборки. мне просто чтоб в одну строку выводило »
$psversiontable.os
Не? Или для PS v 5.1:
$psversiontable.buildversion
Хмм... почему-то в разных версиях PS выдаются разные цифры...
Ну, тогда для надежности, в любой версии PS:
(gcim -cl Win32_OperatingSystem).version

либо вообще, как-то так:
[environment]::osversion.versionstring

sap87@vk
27-09-2022, 08:56
МНе ведь кроме сборке нужно имя пк, последний пользователь, а из домена почта пользователя. И желательно одной строкой.

А вопрос что означает ;$. Или где прочитать?

DJ Mogarych
27-09-2022, 09:03
$psversiontable - это версия самого Пауэршелла.
что означает ;$ »
";" в данном случае разделитель столбцов в CSV.
"$" - это знак переменной (https://learn.microsoft.com/ru-ru/powershell/module/microsoft.powershell.core/about/about_variables?view=powershell-7.2).




© OSzone.net 2001-2012