Mit Remove-Item mit Credentials
-
28-09-2019 - |
Frage
Ich versuche, das Cmdlet Remove-Item als Teil einer Automatisierung für ein System zu verwenden. Die Dateien werden auf einem Server gespeichert, die erhöhte Rechte erfordern das Löschen von Datei auszuführen. Ich habe Zugang zu einem Domänenadministratorkonto, dass ich für eine solche Automatisierung Skripte verwenden.
Der folgende Code wird das PSCredential Objekt bauen:
$password = New-Object System.Security.SecureString
"passwordhere".ToCharArray() | ForEach-Object { $password.AppendChar($_) }
$cred = New-Object System.Management.Automation.PSCredential("domain\username",$password)
$cred
Ich bin vorbei dieses Objekt folgende Aktion:
Remove-Item -LiteralPath $path -Force -Credential $cred
Irgendwelche Ideen?
Lösung
Es ist mir nicht klar, ob die Dateien lokal sind (Sie laufen das Skript auf dem Server) oder remote (auf einer anderen Maschine). Wenn lokale versucht, den Befehl mit einem Hintergrundjob ausgeführt und übergeben Sie in den Anmeldeinformationen zu Start-Job:
$job = Start-Job { Remove-Item -LiteralPath $path -force } -cred $cred
Wait-Job $job
Receive-Job $job
Wenn sie remote sind, dann versuchen Sie es mit remoting:
Invoke-Command -computername servername `
-scriptblock { Remove-Item -LiteralPath $path -force } `
-Cred $cred
Hinweis: Dies erfordert, dass Sie Enable-PSRemoting Maschine auf der Fernbedienung ausgeführt werden.
In der Regel roh Passwörter in Ihrem Skript setzen ist keine gute Idee. Sie können in einer verschlüsselten Weise das Passwort speichern, DPAPI verwenden und später nur das Konto Benutzer kann das Passwort z entschlüsseln.
# Stick password into DPAPI storage once - accessible only by current user
Add-Type -assembly System.Security
$passwordBytes = [System.Text.Encoding]::Unicode.GetBytes("Open Sesame")
$entropy = [byte[]](1,2,3,4,5)
$encrytpedData = [System.Security.Cryptography.ProtectedData]::Protect( `
$passwordBytes, $entropy, 'CurrentUser')
$encrytpedData | Set-Content -enc byte .\password.bin
# Retrieve and decrypted password
$encrytpedData = Get-Content -enc byte .\password.bin
$unencrytpedData = [System.Security.Cryptography.ProtectedData]::Unprotect( `
$encrytpedData, $entropy, 'CurrentUser')
$password = [System.Text.Encoding]::Unicode.GetString($unencrytpedData)
$password
Andere Tipps
Remove-Item kann zulassungs aufgrund fehlschlagen. Alternativ finden, entweder die Referenz für jede Datei und schlug ihn mit einem .Delete () oder alle Dateien in den Papierkorb verschieben.
foreach ($svr in $computers)
{
Invoke-Command -ComputerName $svr {
$folderitems = Get-ChildItem $cachefolder -Recurse
# Method 1: .Delete
foreach ($cachefolderitem in $cachefolderitems)
{
if ($cachefolderitem -like "*.ini")
{
$cachefolderitem.Delete()
}
}
# Method 2: Move all matching files to the recycle bin
Move-Item "$cachefolder\*.ini" 'C:\$Recycle.Bin' -Force
}