Не удается экспортировать csv в powershell, пустой CSV-файл. Экспорт в файл в powershell


экспорт переменной в файл csv

Я новичок в powershell. Вот сценарий, который я пытаюсь написать, что в двух словах будет выводить компьютеры из AD в переменную. Возьмите список и итерацию по каждым из них и сделать следующее:

  • тест соединение (онлайн, в автономном режиме)
  • тест OSArchitecture
  • тест для подраздела
  • выписывать компьютер, состояние соединения, подраздел value to csv file

Каждый раз, когда я пытаюсь выполнить вывод в файл, будь то out-file или export-csv, он не получается правильно. он либо ставит «Длина» и значение, либо длинную строку. Я бы идеально хотел экспортировать в csv, чтобы я мог манипулировать данными. Функция «DoesItemExist» является функцией для проверки наличия реестра. Вот код:

#find computers names that start with H or D $computers=Get-ADComputer -Filter {(name -like "H*") -or (name -like "D*")} -Properties Name | select name #save path to csv file $SaveAs = 'c:\msolhelp\edocs.csv' #loop through the computers collection foreach($line in $computers) { #test if computer is online if(Test-Connection -Cn $line -BufferSize 16 -Count 1 -ea 0 -quiet) { #write computer name to file #test registry path for 64 bit machine $OS=((Get-WmiObject Win32_Operatingsystem -ComputerName $line).OSArchitecture) if ($OS = '64-bit') #if 64 bit check for correct regkey and grab value and appends to file { $regpath = 'SOFTWARE\Wow6432Node\' #check for subkey and append value to file $val = (DoesItemExist -path $regpath -regEntry "PatchLevel") If ($val) { Get-ItemProperty "HKLM:SOFTWARE\Wow6432Node\" | Select- Object -Property PatchLevel | Export-Csv -Path $SaveAs -Append - NoTypeInformation } else {Get-ItemProperty "HKLM:SOFTWARE\Wow6432Node\" | Select-Object -Property CurrentVersion | Export-Csv -Path $SaveAs -Append - NoTypeInformation} } #if false, it must be a 32 bit machine (different registry path) else { #set path for 32 bit machine $regpath = 'HKLM\SOFTWARE\' #check for correct subkey $val = (DoesItemExist -path $regpath -regEntry "PatchLevel") If ($val) { Get-ItemProperty "HKLM:SOFTWARE\" | Select-Object - Property PatchLevel | Export-Csv -Path $SaveAs -Append -NoTypeInformation } else { Get-ItemProperty "HKLM:SOFTWARE\" | Select-Object - Property CurrentVersion | Export-Csv -Path $SaveAs -Append - NoTypeInformation} } } #if test-connect fails, append file with 'offline' else { "$line, offline" continue }

}

powershell export-to-csv5,928

stackoverrun.com

powershell - Как экспортировать данные в CSV в PowerShell?

Это решение создает psobject и добавляет каждый объект к массиву, затем создает csv, связывая содержимое массива с помощью Export-CSV.

$results = @() foreach ($computer in $computerlist) { if((Test-Connection -Cn $computer -BufferSize 16 -Count 1 -ea 0 -quiet)) { foreach ($file in $REMOVE) { Remove-Item "\\$computer\$DESTINATION\$file" -Recurse Copy-Item E:\Code\powershell\shortcuts\* "\\$computer\$DESTINATION\" } } else { $details = @{ Date = get-date ComputerName = $Computer Destination = $Destination } $results += New-Object PSObject -Property $details } } $results | export-csv -Path c:\temp\so.csv -NoTypeInformation

Если вы передаете строковый объект в csv, вы получите его длину, записанную в csv, это потому, что это свойства строки, см. здесь для получения более подробной информации. Информация.

Вот почему я сначала создаю новый объект.

Попробуйте следующее:

write-output "test" | convertto-csv -NoTypeInformation

Это даст вам:

"Length" "4"

Если вы используете Get-Member на Write-Output следующим образом:

write-output "test" | Get-Member -MemberType Property

Вы увидите, что у него есть одно свойство - 'length':

TypeName: System.String Name MemberType Definition ---- ---------- ---------- Length Property System.Int32 Length {get;}

Вот почему Длина будет записана в файл csv.

Обновление: добавление CSV Не самый эффективный способ, если файл становится большим...

$csvFileName = "c:\temp\so.csv" $results = @() if (Test-Path $csvFileName) { $results += Import-Csv -Path $csvFileName } foreach ($computer in $computerlist) { if((Test-Connection -Cn $computer -BufferSize 16 -Count 1 -ea 0 -quiet)) { foreach ($file in $REMOVE) { Remove-Item "\\$computer\$DESTINATION\$file" -Recurse Copy-Item E:\Code\powershell\shortcuts\* "\\$computer\$DESTINATION\" } } else { $details = @{ Date = get-date ComputerName = $Computer Destination = $Destination } $results += New-Object PSObject -Property $details } } $results | export-csv -Path $csvFileName -NoTypeInformation

qaru.site

Powershell Вложенные Hashtables - Экспорт в файл

Im вынимает информацию из AD для вывода большого количества информации, которая будет обрабатываться в более поздней точке.

Мне нужно экспортировать это в csv или что-то в этом роде, поэтому я могу иметь откат (в действительности импортируем файл, чтобы я мог обрабатывать каждый объект, как я могу, с помощью хеш-таблицы ниже. Особенно это внутри $ _. MemberOf).

Хеш им борется с обработкой является:

$logging1 = @{ MemberOf="$users.MemberOf" OriginalOU="$Ou.DistinguishedName" DisabledWhen="$descriptionDisabled" } $logging = @{$users.SamAccountname = $logging1}

, что остальная часть скрипта делает (то разве вставили) является:

итерация через кучу НУ-х. Получение доступа к последним пользователям в течение -90 дней назад или более, а затем передача их в HashTable в вопросе, который я хотел бы добавить к файлу, который будет импортирован позднее.

Я прибегая к помощи в течение нескольких часов, не получая где-то

здесь полный сценарий:

import-module ActiveDirectory $descriptionDisabled = get-date -Format yyyyMMdd $Loggdir = "C:\temp" $array = @{} $loggname = get-date -f yyyyMMdd $90days = ((get-date).AddDays(-90)) $searchBase = 'OU=someou4,OU=someou3,OU=someou2,OU=someou1,DC=name,DC=NO' $ExclusionList = Someexlutions $OUlist = Get-ADOrganizationalUnit -SearchBase $searchBase foreach ($Ou in $OUlist) { $ExpiredADusers = get-aduser -Filter {(LastlogonDate -le $90days) -and (Enabled -eq $True)} -SearchBase $ou.distinguishedname -Properties * #Get information about every user and their groupmembership foreach ($Users in $ExpiredADusers) { $users = get-aduser -Identity $users.SamAccountName -Properties * | Select-Object -Property SamAccountName, MemberOf, DistinguishedName, ObjectGUID $logging = @{$person.SamAccountName = @{ MemberOf=$person.MemberOf; OriginalOU=$Ou.DistinguishedName; DisabledWhen="$descriptionDisabled"}} $Array += $Logging } } $array | export-clixml -path somepath -noclobber

EDIT Решенные решаемая проблема и оригинальный сценарий вопрос был обновлен для обработки Вложенные HashTables

Оригинальная проблема Я думаю, вы можете понять, что я м пытается сделать. Мне нужно сделать файл отката.

Таким образом, экспортируемый файл необходимо легко импортировать. при использовании hashtables вы можете использовать. нотации и каждые Объекты memberof рассматриваются как объект

Что Откату нужен так я могу перебирать импортированную информацию, чтобы переместить пользователь в исходном размещение OU и восстановить членство в

stackoverrun.com

powershell - Powershell: поиск данных в файлах *.txt для экспорта в *.csv

Прежде всего, это мой первый вопрос. Я часто прихожу сюда, чтобы просматривать существующие темы, но теперь я висел на моей собственной проблеме. И я не нашел полезный ресурс прямо сейчас. Моя самая большая проблема заключалась в том, что она не будет работать в Powershell... На данный момент я пытаюсь получить небольшой инструмент Powershell, чтобы сэкономить мне много времени. Для тех, кто не знает cw-sysinfo, это инструмент, который собирает информацию о любой хост-системе (например, Hardware-ID, Product Key и т.д.) И генерирует файлы *.txt. Я хочу сказать, что если у вас есть 20, 30 или 80 серверов в проекте, для просмотра всех файлов требуется огромное количество времени и просто найдите нужные вам строки и поместите их в файл *.csv.

То, что у меня работает, больше похоже на основное средство, оно просматривает все *.txt по определенному пути и проверяет мои ключевые слова. И вот проблема в том, что я просто могу использовать слова до тех, которые мне действительно нужны, как видно ниже:

Operating System: Windows XP Product Type: Professional Service Pack: Service Pack 3 ...

Я не знаю, как я могу рассказать Powershell о поиске "Тип продукта:" - линии и выбрать вместо этого "Профессионал". Позже с ключами или серийными номерами это будет та же проблема, поэтому я просто не могу просматривать "Стандарт" или "Профессионал".

Я поместил свои ключевые слова ($ controls) в дополнительный файл, который я могу прикрепить к папкам проекта и не нужно редактировать в Powershell каждый раз. Код выглядит следующим образом:

Function getStringMatch { # Loop through the project directory Foreach ($file In $files) { # Check all keywords ForEach ($control In $controls) { $result = Get-Content $file.FullName | Select-String $control -quiet -casesensitive If ($result -eq $True) { $match = $file.FullName # Write the filename according to the entry "Found : $control in: $match" | Out-File $output -Append } } } } getStringMatch

qaru.site

powershell - PowerShell - экспорт переменной в файл csv

Я новичок в PowerShell. Вот сценарий, который я пытаюсь написать, что в двух словах будет выводить компьютеры из AD в переменную. Возьмите список и пройдите по каждому из них и выполните следующие действия:

  • тестовое соединение (онлайн, офлайн)
  • тест OSArchitecture
  • тест для подраздела
  • выписать компьютер, состояние соединения, значение подключа в файл csv

Каждый раз, когда я пытаюсь выполнить вывод в файл, будь то out-file или export-csv, он не получается правильно. он либо ставит "Длина" и значение, либо длинную строку. Я бы идеально хотел экспортировать в csv, чтобы я мог манипулировать данными. Функция "DoesItemExist" является функцией для проверки наличия реестра. Здесь код:

#find computers names that start with H or D $computers=Get-ADComputer -Filter {(name -like "H*") -or (name -like "D*")} -Properties Name | select name #save path to csv file $SaveAs = 'c:\msolhelp\edocs.csv' #loop through the computers collection foreach($line in $computers) { #test if computer is online if(Test-Connection -Cn $line -BufferSize 16 -Count 1 -ea 0 -quiet) { #write computer name to file #test registry path for 64 bit machine $OS=((Get-WmiObject Win32_Operatingsystem -ComputerName $line).OSArchitecture) if ($OS = '64-bit') #if 64 bit check for correct regkey and grab value and appends to file { $regpath = 'SOFTWARE\Wow6432Node\' #check for subkey and append value to file $val = (DoesItemExist -path $regpath -regEntry "PatchLevel") If ($val) { Get-ItemProperty "HKLM:SOFTWARE\Wow6432Node\" | Select- Object -Property PatchLevel | Export-Csv -Path $SaveAs -Append - NoTypeInformation } else {Get-ItemProperty "HKLM:SOFTWARE\Wow6432Node\" | Select-Object -Property CurrentVersion | Export-Csv -Path $SaveAs -Append - NoTypeInformation} } #if false, it must be a 32 bit machine (different registry path) else { #set path for 32 bit machine $regpath = 'HKLM\SOFTWARE\' #check for correct subkey $val = (DoesItemExist -path $regpath -regEntry "PatchLevel") If ($val) { Get-ItemProperty "HKLM:SOFTWARE\" | Select-Object - Property PatchLevel | Export-Csv -Path $SaveAs -Append -NoTypeInformation } else { Get-ItemProperty "HKLM:SOFTWARE\" | Select-Object - Property CurrentVersion | Export-Csv -Path $SaveAs -Append - NoTypeInformation} } } #if test-connect fails, append file with 'offline' else { "$line, offline" continue }

}

задан Rook 16 июля '14 в 16:26 источник поделиться

qaru.site

Не удается экспортировать csv в powershell, пустой CSV-файл

Я пытаюсь получить, какие файлы и папки разрешений имеют и экспортируют в файл csv. Я могу получить информацию для отображения на экране, но когда я пытаюсь ее экспортировать, полученный файл csv пуст.

Код:

function Test-IsWritable(){ <# .Synopsis Command tests if a file is present and writable. .Description Command to test if a file is writeable. Returns true if file can be opened for write access. .Example Test-IsWritable -path $foo Test if file $foo is accesible for write access. .Example $bar | Test-IsWriteable Test if each file object in $bar is accesible for write access. .Parameter Path Psobject containing the path or object of the file to test for write access. #> [CmdletBinding()] param([Parameter(Mandatory=$true,ValueFromPipeline=$true)][psobject]$path) process{ Write-Host "Test if file $path is writeable" if (Test-Path -Path $path -PathType Any){ $target = Get-Item $path -Force try{ $writestream = $target.Openwrite() $writestream.Close() | Out-Null Remove-Variable -Name writestream Write-Host "File is writable" -ForegroundColor DarkGreen Write-Output $true } catch{ Write-Host "File is not writable" -ForegroundColor DarkRed Write-Output $false } Remove-Variable -Name target } else{ Write-Host "File $path does not exist or is a directory" -ForegroundColor Red Write-Output $false } } } write-host "WARNING: If checking deep folders (where the full path is longer than 248 characters) please " -foregroundcolor Yellow -NoNewline Write-Host "MAP THE DRIVE " -ForegroundColor Red -NoNewline Write-Host "in order to keep the names as short as possible" -ForegroundColor Yellow $basefolder = Read-Host -Prompt 'What is the folder or files you want to get permissions of?' write-host "WARNING: if permissions.csv already exists, it will be overwritten!" -foregroundcolor Yellow Write-Host 'Export results to CSV? (y/n): ' -ForegroundColor Magenta -NoNewline $export = Read-Host if ($export -like "y") { Write-Host "Name the file (ex: permissions.csv): " -ForegroundColor Magenta -NoNewline $FileName = Read-Host $Outfile = “$PSScriptRoot\$FileName” write-host "Will write results to $PSScriptRoot\$FileName" -ForegroundColor Green } else { write-host "User did not type 'y', continuing" -ForegroundColor DarkYellow } $files = get-childitem $basefolder -recurse -File Write-Host $files Write-Host "=========================" -ForegroundColor Black #$subfiles = Get-ChildItem $folders -Recurse -File #Write-Host $folders #Write-Host "=========================" -ForegroundColor Black #Write-Host $subfiles $results = foreach($folder in $files) { New-Object psobject -Property @{ File = $folder; Access = "$basefolder\$folder" | Test-IsWritable } Write-Host $folder } #$subresults = foreach($subfile in $subfiles) { # New-Object psobject -Property @{ # File = $subfiles; # Access = $subfile | Test-IsWritable; # } #} Write-Host $results Write-Host "Finished combo loop, exporting..." -ForegroundColor Green $results | Export-Csv $Outfile -NoTypeInformation -Delimiter ";" Write-Host "Converting delimited CSV to Column Excel Spreadsheet" $outputXLSX = $PSScriptRoot + "\$Filename.xlsx" $excel = New-Object -ComObject excel.application $workbook = $excel.Workbooks.Add(1) $worksheet = $workbook.worksheets.Item(1) $TxtConnector = ("TEXT;" + $Outfile) $Connector = $worksheet.QueryTables.add($TxtConnector,$worksheet.Range("A1")) $query = $worksheet.QueryTables.item($Connector.name) $query.TextFileOtherDelimiter = ';' $query.TextFileParseType = 1 $query.TextFileColumnDataTypes = ,2 * $worksheet.Cells.Columns.Count $query.AdjustColumnWidth = 1 $query.Refresh() $query.Delete() $Workbook.SaveAs($outputXLSX,51) $excel.Quit() Remove-Item $Outfile Write-Host "See $PSScriptRoot\$Filename.xlsx for results" -ForegroundColor Green

UPDATE: В основном работает, как ни странно, хотя выход:

Z: \ testfolder \ file1.txt Z: \ testfolder \ file1.txt Z: \ testfolder \ file1.txt Z: \ testfolder \ file1.txt Z: \ testfolder \ file1.txt Z: \ testfolder \ file1.txt Z: \ testfolder \ file1.txt Z: \ testfolder \ file2.txt Z: \ testfolder \ file2.txt Z: \ testfolder \ file2.txt Z: \ testfolder \ file2.txt Z: \ testfolder \ file2.txt Z: \ testfolder \ file2.txt Z: \ testfolder \ file2.txt Z: \ testfolder \ file3.rar Z: \ testfolder \ file3.rar Z: \ testfolder \ file3.rar Z: \ testfolder \ file3.rar Z: \ testfolder \ file3.rar Z: \ testfolder \ file3.rar Z: \ testfolder \ file3.rar Указанный путь, имя файла или оба они слишком длинны . Полноценное имя файла должно быть менее 260 символов, и имя каталога должно быть менее 248 символов.

В следующей колонке:

FileAccess FullControl FullControl FullControl Изменить, Синхронизировать ReadAndExecute, Синхронизировать Modify, Синхронизировать Modify, Синхронизировать FullControl FullControl FullControl Изменить, Синхронизировать ... Спектр ified path, имя файла или оба слишком длинны. Полноценное имя файла должно быть менее 260 символов, а имя каталога должно быть менее 248 символов.

Я не уверен, почему он показывает несколько строк для одного и того же файла, я хотел бы иметь 1 строку на файл с истинным файловым доступом.

csv powershell permissions export307

stackoverrun.com

Сравнение 2 CSV-файлов в powershell, экспортирующих разницу в другой файл.

Я написал этот сценарий и, возможно, поклялся, что это дало мне неудачу рано утром, но теперь я ничего не получаю и не знаю, почему.

В принципе мне нужно сравнить $SourceAddress с $OutputAddress и экспортировать в чем разница между файлами в другой CSV. Любая помощь в том, как получить выходной файл, будет оценена по достоинству. Или лучший способ выполнить сравнение, отличное от командлета «Compare-Object», было бы потрясающе. Благодарю.

########################################################### # # Douglas Francis # DNS Audit Script # V 1.2 # Date: 05/06/2014 # # Pulls IP address from a text file. Parses the IP's in the text file for their DNS entry and exports to a CSV file. # For IP address' that do not resolve get parsed to a new file. # # ########################################################### #This creates an ouput folder called Script_Results to put the results in. $CheckFolder = Test-Path -PathType Container Script_Results if($CheckFolder -eq $false) { New-Item 'Script_Results' -Type Directory } #This gets the IP address' from the file $IPADDR = Get-Content "C:\Users\douglasfrancis\Desktop\IP_test.txt" #This logic runs through each line in the text file to get the IP's perform a reverse DNS search and pulls the IP and hostname to be outputted and sorted later. It also ignores the errors from failed results $SortIP [email protected]() ForEach ($IPADDR in $IPADDR) { $ErrorActionPreference = "SilentlyContinue" $SortIP += [System.Net.DNS]::GetHostbyAddress($IPADDR) | Add-Member -Name IP -Value $IPADDR -MemberType NoteProperty -PassThru | Select Hostname, IP } #Running through the data from $SortIP sorts by hostname and exports to CSV $SortIP | Sort -Property Hostname | Export-Csv "C:\Users\douglasfrancis\Desktop\Script_Results\ReverseLookup.csv" -NoTypeInformation #Here we start to work some voodoo magic. Instead of attempting to parse the errors from the failed DNS results we're going to compare the orginal IP address txt file to the output file of the DNS #By comparing those two files we can determine what files failed to resolve a DNS and output that to a file for review. #Here we're reimporting the exported CSV file of the DNS results. Pulling the IP address column from it and then exporting it again with only the IP info. Import-csv "C:\Users\douglasfrancis\Desktop\Script_Results\ReverseLookup.csv" | Select IP | Export-csv -Path "C:\Users\douglasfrancis\Desktop\Script_Results\OutputAddress.csv" -NoTypeInformation #Now for some futher voodoo data manipulation. Going to take the source IP address file import it back in as a CSV file with a IP column header. # After that we will then reexport it back again as a CSV file so a comparision can be done between the two files. Import-csv "C:\Users\douglasfrancis\Desktop\IP_Test.txt" -Header "IP" | Export-csv -Path "C:\Users\douglasfrancis\Desktop\Script_Results\InputAddress.csv" -NoTypeInformation #Alright just a bit more voodoo for some more data manipulation. Going to take those parsed data files from above and assign them to a var for further magic $OutputAddress = Import-csv "C:\Users\douglasfrancis\Desktop\Script_Results\OutputAddress.csv" -NoTypeInformation $SourceAddress = Import-csv "C:\Users\douglasfrancis\Desktop\Script_Results\InputAddress.csv" -NoTypeInformation #Finally here we make use of all the voodo magic and do a comparison of data so we can find out what IP's failed to resolve via DNS and export that to the failed file. Compare-Object $OutputAddress $SourceAddress | Select InputObject | Export-csv "C:\Users\douglasfrancis\Desktop\Script_Results\ReverseLookup_failed.csv" -NoTypeInformation #Alrighty, one final thing to do some housecleaning and we're outta here! Remove-Item "C:\Users\douglasfrancis\Desktop\Script_Results\InputAddress.csv" Remove-Item "C:\Users\douglasfrancis\Desktop\Script_Results\OutputAddress.csv"

powershell scripting dns export-to-csv reverse-dns866

stackoverrun.com