Question

Je tente d'utiliser l'applet de commande Remove-Item dans le cadre d'une automatisation d'un système. Les fichiers sont stockés sur un serveur qui nécessite des droits élevés pour effectuer la suppression de fichiers. J'ai accès à un compte administrateur de domaine que j'utilise pour ces scripts d'automatisation.

Le code ci-dessous construira l'objet PSCredential:

$password = New-Object System.Security.SecureString
"passwordhere".ToCharArray() | ForEach-Object { $password.AppendChar($_) }
$cred = New-Object System.Management.Automation.PSCredential("domain\username",$password)
$cred

Je passe cet objet à l'action suivante:

Remove-Item -LiteralPath $path -Force -Credential $cred

Toutes les idées?

Était-ce utile?

La solution

Il est pas clair pour moi si les fichiers sont locaux (vous exécutez le script sur le serveur) ou à distance (sur une autre machine). Si essayer local exécutant la commande en utilisant un travail de fond et de passer dans les lettres de créance au Start-Job:

$job = Start-Job { Remove-Item -LiteralPath $path -force } -cred $cred 
Wait-Job $job
Receive-Job $job

Si elles sont à distance, essayez d'utiliser l'accès distant:

Invoke-Command -computername servername `
               -scriptblock { Remove-Item -LiteralPath $path -force } `
               -Cred $cred

Note: Il faut donc que vous exécutez sur la machine distante Activer-PSRemoting.

En général, les mots de passe de mettre premières dans votre script est pas une bonne idée. Vous pouvez stocker le mot de passe de manière chiffrée en utilisant DPAPI et plus tard, seul ce compte utilisateur peut déchiffrer le mot de passe par exemple.

# 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 

Autres conseils

Remove-Item peut échouer à cause d'une autorisation. Vous pouvez également trouver soit la référence pour chaque fichier et appuyez avec un .Delete () ou déplacer tous les fichiers dans la corbeille.

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 
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top