Подтвердить что ты не робот

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

Я новичок в 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.

4b9b3361

Ответ 1

Я обычно создаю пользовательские объекты в этих циклах, а затем добавляю эти объекты в массив, который я могу легко манипулировать, сортировать, экспортировать в 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"

Ответ 2

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

"$computer, $Speed, $Regcheck" | out-file -filepath C:\temp\scripts\pshell\dump.txt -append -width 200

Ответ 3

Вы можете объединить массив значений вместе с помощью оператора 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

Ответ 4

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

"$computer,$Speed,$Regcheck" | out-file -filepath C:\temp\scripts\pshell\dump.txt -append -width 200

Ответ 5

Простое решение состоит в том, чтобы избежать создания массива до того, как конвейер будет 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

Ответ 6

Мне повезло в моем поиске 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"

Ответ 7

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

$computers = "pc1,pc2"
$users = "user1,user2"

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

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

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

Get-Help Out-File