Powershell V2 - Logging remove-item

1.5k views Asked by At

I've seen a few answers to similar problems however I cannot get any of them to work. Probably as I'm using V2 of powershell and cannot redirect streams. My question is simple, I wish to log the verbose stream of remove-item cmdlet in the following script:

$CSVList = (Get-Content "C:\Users\Leeds TX 11\Desktop\Test folder\Watchfolder\DAZN Production Numbers - purgelist.csv" | select -Skip 1) -split ','| Where {$_}

$Netappdirectory = "C:\Users\Leeds TX 11\Desktop\Test folder\NetApp"
$Logfile = "C:\Users\Leeds TX 11\Desktop\Test folder\logfile.txt"

Get-ChildItem $Netappdirectory |
  Where-Object {$CSVList -contains $_.BaseName} |
  Remove-Item -Verbose
1

There are 1 answers

0
Ansgar Wiechers On BEST ANSWER

PowerShell v2 allows only redirection of the Success (STDOUT) and Error (STDERR) output streams. Redirection for other streams is not available prior to PowerShell v3. Also, Remove-Item doesn't have a parameter for defining a variable for verbose (or debug) output, so you can't capture that output in a variable like you can with warning and error output.

Your best option if you can't upgrade to PowerShell v3 or newer is probably creating a transcript of the operation:

Start-Transcript $Logfile -Append
Get-ChildItem $Netappdirectory | ... | Remove-Item -Verbose
Stop-Transcript

Otherwise you would need to run the operation in a separate PowerShell process. Additional streams of external processes are mangled into the Success and Error output streams (STDOUT, STDERR) when the output is returned to the parent process.

powershell.exe -Command "&{Get-ChildItem $Netappdirectory | ... | Remove-Item -Verbose}" >> $Logfile

That's a pretty ugly approach, though, so I wouldn't recommend it.


Side note: Even PowerShell v2 has an Import-Csv cmdlet, so I fail to see why you would want to emulate it via Get-Content and -split.