Я новичок в 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:\temp\scripts\pshell\dump.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"
Используйте это:
"$computer, $Speed, $Regcheck" | out-file -filepath C:\temp\scripts\pshell\dump.txt -append -width 200
Вы можете объединить массив значений вместе с помощью оператора PowerShell `-join ‘. Вот пример:
$FilePath = '{0}\temp\scripts\pshell\dump.txt' -f $env:SystemDrive;
$Computer = 'pc1';
$Speed = 9001;
$RegCheck = $true;
$Computer,$Speed,$RegCheck -join ',' | Out-File -FilePath $FilePath -Append -Width 200;
Выход
pc1,9001,True
$computer,$Speed,$Regcheck
создаст массив и запустит out-file
для каждой переменной = они получат отдельные строки. Если сначала построить одну строку с использованием переменных, она отобразит одну строку. Вот так:
"$computer,$Speed,$Regcheck" | out-file -filepath C:\temp\scripts\pshell\dump.txt -append -width 200
Простое решение состоит в том, чтобы избежать создания массива до того, как конвейер будет Out-File. Правило №1 PowerShell заключается в том, что запятая является специальным разделителем, а поведение по умолчанию – создание массива. Конкатенация выполняется следующим образом.
$computer + "," + $Speed + "," + $Regcheck | out-file -filepath C:\temp\scripts\pshell\dump.txt -append -width 200
Создает массив из трех элементов.
$computer,$Speed,$Regcheck
FYKJ
100
YES
против. конкатенация трех элементов, разделенных запятыми.
$computer + "," + $Speed + "," + $Regcheck
FYKJ,100,YES
Мне повезло в моем поиске 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:\Temp\YourData.csv"
Приветствия
Скажем, у вас есть две переменные:
$computers = "pc1,pc2"
$users = "user1,user2"
Чтобы сохранить их в текстовом файле:
$computers,$users | out-file c:\youfilename.txt
Для получения дополнительной информации о Out-File введите это в оболочке:
Get-Help Out-File