Pregunta

Estoy intentando utilizar el cmdlet Remove-El artículo como parte de una automatización de un sistema. Los archivos se almacenan en un servidor que requiere derechos elevados para llevar a cabo la eliminación del archivo. Tengo acceso a una cuenta de administrador de dominio que uso para este tipo de scripts de automatización.

El código de abajo va a construir el objeto PSCredential:

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

Me estoy pasando este objeto a la siguiente acción:

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

Algunas ideas?

¿Fue útil?

Solución

No me queda claro si los archivos son locales (que se está ejecutando la secuencia de comandos en el servidor) o remota (en otro equipo). Si intento local que ejecuta el comando utilizando un job de fondo y pase las credenciales a Start-Job:

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

Si son a distancia, intente utilizar entorno remoto:

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

Nota: Esto requiere que se ejecuta Enable-PSRemoting en la máquina remota.

En general, poniendo contraseñas primas en el script no es una gran idea. Puede almacenar la contraseña de una manera cifrada utilizando DPAPI y más tarde, sólo esa cuenta de usuario puede descifrar la contraseña por ejemplo:.

# 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 

Otros consejos

Remove-Item pueden fallar debido a autorización. Como alternativa, o bien encontrar la referencia para cada archivo y lo golpeó con un .Delete () o mover todos los archivos a la papelera de reciclaje.

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 
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top