Ho uno script con alcuni comandi come Write-Host "Server1"
. Come posso esportarlo in un file?Write-Host => Esporta in un file
Quando ho provato con script > export.txt
non funziona.
Ho uno script con alcuni comandi come Write-Host "Server1"
. Come posso esportarlo in un file?Write-Host => Esporta in un file
Quando ho provato con script > export.txt
non funziona.
Write-host
reindirizzare l'output solo alla console.
È possibile utilizzare write-output
e reindirizzare a un file (> export.txt
o tubo di out-file export.txt
)
Nel caso estremo in cui è assolutamente necessario reindirizzare tutto l'output da uno script un'occhiata a questo cmdlet
start-transcript
get-help start-transcript -full
In PowerShell script > export.txt
è zucchero sintattico per script | Out-File -path export.txt
.
Write-Host invia gli oggetti all'host e non restituisce alcun oggetto. Ciò significa che nessun oggetto viene reindirizzato al cmdlet Out-File e non viene scritto nulla nel file export.txt. Una soluzione alternativa (nel caso in cui non si desideri modificare lo script) consiste nell'aprire una console cmd
e reindirizzare l'output di PowerShell utilizzando il reindirizzamento della console cmd.
C:\> powershell .\script.ps1 > .\export.txt
Ho dimenticato di dire che esiste un comando di Exchange che è: Get-MailboxServer C: \> powershell. \ Script.ps1>. \ Export.txt Il termine 'Get-MailboxServer' non è riconosciuto come un cmdlet , funzione, programma operativo o file di script. Verifica il termine e riprova. Grazie – expirat001
Provare a connettersi alla configurazione dello spazio di esecuzione remoto di Exchange all'inizio dello script. '$ session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http: // $ nomecomputer/powershell; import-pssession $ session'. Nel caso in cui abbiate problemi nel fare ciò, prendete in considerazione l'apertura di una nuova domanda in quanto questo problema non è correlato al problema iniziale. –
L'utilità di approcci diversi è in gran parte sta per essere basata sul vostro caso d'uso, naturalmente, ma ...
Il modo "giusto" per fare questo, credo, se si ha il controllo dei copioni (e questo è quello che faccio di solito, anche se ammetto che stavo cercando una scorciatoia oggi), è "sovraccarico" Write-Host
, per così dire, e quindi inviare tutto ciò che avresti inviato a Write-Host
a questo nuova funzione.
Solo per rimanere con i verbi PowerShell validi, chiamo il mio Write-Feedback
.
function Write-Feedback()
{
param
(
[Parameter(Position=0,ValueFromPipeline=$true)]
[string]$msg,
[string]$BackgroundColor = "Yellow",
[string]$ForegroundColor = "Black"
)
Write-Host -BackgroundColor $BackgroundColor -ForegroundColor $ForegroundColor $msg;
}
Così ora avete una funzione che opera essenzialmente identico a Write-Host
, ma si può facilmente controllare dove l'uscita va. Se è necessario scrivere su un file, è possibile modificare Write-Feedback
in modo che tutte le sue chiamate eseguano ora tutto ciò che è necessario.
Si potrebbe semplicemente cambiare la linea a Write-Output
, a seconda se si sta facendo qualsiasi altra cosa giù la conduttura ...
...
Write-Output $msg;
Si potrebbe inviare l'output allo stesso file che si sta piping resto del comando, ma all'interno della funzione Write-Feedback
, pur mantenendo il Write-Host troppo:
function Write-Feedback()
{
param
(
[Parameter(Position=0,ValueFromPipeline=$true)]
[string]$msg,
[string]$BackgroundColor = "Yellow",
[string]$ForegroundColor = "Black"
)
Write-Host -BackgroundColor $BackgroundColor -ForegroundColor $ForegroundColor $msg;
$msg | Out-File "./export.txt" -Append; # <<< or add a param to location
}
O se avete un paio di valori anomali in cui non si desidera che il contenuto Write-Feedback
per essere convogliato in un file, potresti aggiungere una nuova o parametro ptional che chiede cosa fare con ogni specifica chiamata Write-Feedback
che si switch
off - e inviare al file, a Write-Host
, a Write-Output
, ecc. - modificare il valore predefinito in quello che si desidera in genere e in modo esplicito switch
parametro dove è impostato in modo esplicito.
ecc. Ecc.È davvero molto più facile instradare tutte le chiamate in una stanza di compensazione centralizzata per l'output in PowerShell. Quindi, quando fai fare cambia idea, non è una ricerca enorme e sostituisci e sostituisci un'attività.
Credo che l'unico dolore qui sarebbe se non si desidera inviare le cose lungo la pipeline, in modo Write-Output
è fuori, ma ha voluto assicurarsi che il file Write-Feedback
ha scritto al era lo stesso di quello che hai specificato nel il > export.txt
dal tuo esempio senza modificare Write-Feedback
ogni volta. Non sono sicuro se c'è un modo semplice per farlo.
Ma dal momento che dovresti essere già un passo rimosso dal tuo "passaggio pipe", probabilmente non è un caso d'uso legittimo.
In ogni caso, la linea di fondo è di sovraccaricare Write-Host
e fare tutto ciò che si desidera modificando in un unico punto.
qualsiasi soluzione finale a riguardo? – Kiquenet