tutorial - Enviar variables de PowerShell a un archivo de texto.
powershell tutorial (7)
Soy nuevo en PowerShell y tengo un script que recorre Active Directory en busca de ciertas computadoras. Obtengo varias variables y luego ejecuto funciones para verificar cosas como WMI y la configuración del registro.
En la consola, mi script ejecuta un excelente y simple comando Write-Host imprime los datos en la pantalla como deseo. Sé sobre Export-Csv cuando uso la canalización ... pero no estoy buscando imprimir desde la tubería.
Quiero escribir las variables en un archivo de texto, continuar el bucle y comprobar la próxima computadora en AD ... generar la siguiente iteración de las mismas variables en la siguiente línea. Aquí está mi host de escritura:
Write-Host ($computer)","($Speed)","($Regcheck)","($OU)
Archivo de salida:
$computer,$Speed,$Regcheck | out-file -filepath C:/temp/scripts/pshell/dump.txt -append -width 200
Me da los datos, pero cada variable está en su propia línea. ¿Por qué? Me gustaría todas las variables en una línea con separación de coma. ¿Hay una forma sencilla de hacer esto similar a la línea de escritura VB? Mi versión de PowerShell parece ser 2.0.
Digamos que tienes dos variables:
$computers = "pc1,pc2"
$users = "user1,user2"
Para guardarlos en un archivo de texto:
$computers,$users | out-file c:/youfilename.txt
Para obtener más información sobre Out-File , escriba esto en un shell:
Get-Help Out-File
Fui conducido aquí en mi búsqueda de Google. En una muestra de buena fe, he incluido lo que junté de partes de este código y otro código que he reunido en el camino.
# 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"
Aclamaciones
La solución simple es evitar crear una matriz antes de canalizar a Out-File . La regla # 1 de PowerShell es que la coma es un delimitador especial, y el comportamiento predeterminado es crear una matriz. La concatenación se hace así.
$computer + "," + $Speed + "," + $Regcheck | out-file -filepath C:/temp/scripts/pshell/dump.txt -append -width 200
Esto crea una matriz de tres elementos.
$computer,$Speed,$Regcheck
FYKJ
100
YES
vs. concatenación de tres elementos separados por comas.
$computer + "," + $Speed + "," + $Regcheck
FYKJ,100,YES
Normalmente construyo objetos personalizados en estos bucles y luego los agrego a una matriz que puedo manipular, ordenar, exportar a CSV, etc. fácilmente.
# 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"
Puede concatenar una matriz de valores usando el operador ''-join'' de PowerShell. Aquí hay un ejemplo:
$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;
Salida
pc1,9001,True
Utilizar esta:
"$computer, $Speed, $Regcheck" | out-file -filepath C:/temp/scripts/pshell/dump.txt -append -width 200
$computer,$Speed,$Regcheck
creará una matriz y ejecutará out-file
por variable = obtendrán líneas separadas. Si construyes una sola cadena usando primero las variables, se mostrará una sola línea. Me gusta esto:
"$computer,$Speed,$Regcheck" | out-file -filepath C:/temp/scripts/pshell/dump.txt -append -width 200