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?

War es hilfreich?

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 
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top