Выведите переменные PowerShell в текстовый файл

Вопрос:Я новичок в PowerShell и имею script, который просматривает поиск в Active Directory для определенных компьютеров. Я получаю несколько переменных, а затем запускаю функции для проверки таких вещей, как WMI и настройки реестра. В консоли моя script работает отлично и просто Write-Host команда печатает данные на экране, как я хочу. Я знаю о Export-Csv при

Вопрос:

Я новичок в PowerShell и имею script, который просматривает поиск в Active Directory для определенных компьютеров. Я получаю несколько переменных, а затем запускаю функции для проверки таких вещей, как WMI и настройки реестра.

В консоли моя script работает отлично и просто Write-Host команда печатает данные на экране, как я хочу. Я знаю о Export-Csv при использовании конвейера… но я не хочу печатать из конвейера.

Я хочу записать переменные в текстовый файл, продолжить цикл и проверить следующий компьютер в AD… вывести следующую итерацию тех же переменных на следующей строке. Вот мой Write-Host:

Write-Host ($computer)»,»($Speed)»,»($Regcheck)»,»($OU)

Выходной файл:

$computer,$Speed,$Regcheck | out-file -filepath C:tempscriptspshelldump.txt -append -width 200

Он дает мне данные, но каждая переменная находится в отдельной строке. Зачем? Я бы хотел, чтобы все переменные в одной строке разделились запятыми. Есть ли простой способ сделать это сродни записи VB? Моя версия PowerShell выглядит как 2.0.

Лучший ответ:

Я обычно создаю пользовательские объекты в этих циклах, а затем добавляю эти объекты в массив, который я могу легко манипулировать, сортировать, экспортировать в CSV и т.д.:

# Construct an out-array to use for data export $OutArray = @() # The computer loop you already have foreach ($server in $serverlist) { # Construct an object $myobj = «» | Select «computer», «Speed», «Regcheck» # Fill the object $myobj.computer = $computer $myobj.speed = $speed $myobj.regcheck = $regcheck # Add the object to the out-array $outarray += $myobj # Wipe the object just to be sure $myobj = $null } # After the loop, export the array to CSV $outarray | export-csv «somefile.csv» Ответ №1

Используйте это:

«$computer, $Speed, $Regcheck» | out-file -filepath C:tempscriptspshelldump.txt -append -width 200 Ответ №2

Вы можете объединить массив значений вместе с помощью оператора PowerShell `-join ‘. Вот пример:

$FilePath = ‘{0}tempscriptspshelldump.txt’ -f $env:SystemDrive; $Computer = ‘pc1’; $Speed = 9001; $RegCheck = $true; $Computer,$Speed,$RegCheck -join ‘,’ | Out-File -FilePath $FilePath -Append -Width 200;

Выход

pc1,9001,True Ответ №3

$computer,$Speed,$Regcheck создаст массив и запустит out-file для каждой переменной = они получат отдельные строки. Если сначала построить одну строку с использованием переменных, она отобразит одну строку. Вот так:

«$computer,$Speed,$Regcheck» | out-file -filepath C:tempscriptspshelldump.txt -append -width 200 Ответ №4

Простое решение состоит в том, чтобы избежать создания массива до того, как конвейер будет Out-File. Правило №1 PowerShell заключается в том, что запятая является специальным разделителем, а поведение по умолчанию – создание массива. Конкатенация выполняется следующим образом.

$computer + «,» + $Speed + «,» + $Regcheck | out-file -filepath C:tempscriptspshelldump.txt -append -width 200

Создает массив из трех элементов.

$computer,$Speed,$Regcheck FYKJ 100 YES

против. конкатенация трех элементов, разделенных запятыми.

$computer + «,» + $Speed + «,» + $Regcheck FYKJ,100,YES Ответ №5

Мне повезло в моем поиске Google. В доброй воле я включил то, что я собрал вместе с частями этого кода и другим кодом, который я собрал на этом пути.

# This script is useful if you have attributes or properties that span across several commandlets # and you wish to export a certain data set but all of the properties you wish to export are not # included in only one commandlet so you must use more than one to export the data set you want # # Created: Joshua Biddle 08/24/2017 # Edited: Joshua Biddle 08/24/2017 # $A = Get-ADGroupMember «YourGroupName» # Construct an out-array to use for data export $Results = @() foreach ($B in $A) { # Construct an object $myobj = Get-ADuser $B.samAccountName -Properties ScriptPath,Office # Fill the object $Properties = @{ samAccountName = $myobj.samAccountName Name = $myobj.Name Office = $myobj.Office ScriptPath = $myobj.ScriptPath } # Add the object to the out-array $Results += New-Object psobject -Property $Properties # Wipe the object just to be sure $myobj = $null } # After the loop, export the array to CSV $Results | Select «samAccountName», «Name», «Office», «ScriptPath» | Export-CSV «C:TempYourData.csv»

Приветствия

Ответ №6

Скажем, у вас есть две переменные:

$computers = «pc1,pc2» $users = «user1,user2»

Чтобы сохранить их в текстовом файле:

$computers,$users | out-file c:youfilename.txt

Для получения дополнительной информации о Out-File введите это в оболочке:

Get-Help Out-File

Оцените статью
Добавить комментарий