Powershell Trasnscript - вывод в файл и НЕ отображается в консоли - PullRequest
0 голосов
/ 29 января 2019

Я пишу скрипт PowerShell для сбора общей информации на наших серверах.Я написал скрипт так, чтобы он выводил в файл с именем output.txt с помощью командлета PowerShells Start-Transcript.Вывод работает нормально.Однако я просто хочу, чтобы вывод в файле не отображался на консоли.

Я искал и пытался выяснить, может ли Start-Transcription подавить вывод на консоль, но я ничего не нашел.

Это очень урезанная версия кода, который я использую -

Start-Transcript -path "Path\To\Output\File.txt"
$servers = Get-Content -path "Path\To\Servers\List\file.txt"
foreach ($server in $servers)
{
net view
net use
net session
}
Stop-Transcript

Он все правильно выводит в файл, но я просто хотел бы, чтобы он НЕ отображал результаты скрипта / команды в консоли.Если это возможно.

1 Ответ

0 голосов
/ 29 января 2019

Будет ли это работать?

$FilePath = 'Path\To\Output\File.txt'

net view | Out-File -FilePath $FilePath
net use | Out-File -FilePath $FilePath -NoClobber -Append
net session | Out-File -FilePath $FilePath -NoClobber -Append

Или связать его:

Invoke-Command {net view ; net use ; net session} | Out-File -FilePath $FilePath -NoClobber -Append

РЕДАКТИРОВАТЬ на основе комментария (но записывается свободно из памяти на iphone, так что, возможно,незначительные ошибки): чтобы выполнить это удаленно для списка серверов, вы сначала включаете удаленное взаимодействие Powershell на серверах, есть много способов сделать это, и вот один из них - запустить в локальном сеансе PowerShell на каждом сервере (администратор Runas):

winrm quickconfig

Затем, предполагая, что все они имеют одинаковый логин, вы можете:

$Cred = Get-Credential
$Servers = ’server1.example.com’,’server2.example.com’

Invoke-Command -ComputerNames $Servers -Credential $Cred -ScriptBlock {
 Do stuff
 Do some other stuff
} | Out-File -FilePath $FilePath -NoClobber -Append

Результаты возвращаются в виде массива, поэтому, если вы хотите разделить вывод для каждого сервера, вы можете попробовать:

$a = Invoke-Command [...]etc but skip the |Out-File

затем выполните некоторый цикл, который, по сути, выполняет эту часть, предоставляя вам ручной путь:

$a[0] | Out-File -FilePath $FilePath1 -NoClobber -Append #result from first computer
$a[1] | Out-File -FilePath $FilePath2 -NoClobber -Append #result from second computer
...

и пример цикла:

$a | Foreach-Object {$_ | Out-File -FilePath $Path -Append -NoClobber}

И читатьимена серверов из текстового файла, одно имя сервера в строке:

$Servers = Get-Content -Path ’C:\temp\example.txt’
Invoke-Command -ComputerName $Servers [...]etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...