Использование Remove-Item с учетными данными - PullRequest
3 голосов
/ 17 июня 2010

Я пытаюсь использовать командлет Remove-Item как часть автоматизации системы.Файлы хранятся на сервере, которому требуются повышенные права для удаления файла.У меня есть доступ к учетной записи администратора домена, которую я использую для таких скриптов автоматизации.

Приведенный ниже код создаст объект PSCredential:

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

Я передаю этот объект следующему действию:

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

Есть идеи?

Ответы [ 2 ]

6 голосов
/ 18 июня 2010

Мне не ясно, являются ли файлы локальными (вы запускаете скрипт на сервере) или удаленными (на другой машине).Если локально, попробуйте выполнить команду, используя фоновое задание, и передайте учетные данные в Start-Job:

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

Если они удаленные, попробуйте использовать удаленное взаимодействие:

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

ПримечаниеДля этого необходимо выполнить Enable-PSRemoting на удаленном компьютере.

В общем, вставлять необработанные пароли в ваш скрипт не очень хорошая идея.Вы можете хранить пароль в зашифрованном виде, используя DPAPI и более поздние версии, только эта учетная запись пользователя может расшифровать пароль, например:

# 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 
0 голосов
/ 08 декабря 2016

Remove-Item может потерпеть неудачу из-за авторизации. Или же найдите ссылку для каждого файла и нажмите на нее .Delete () или переместите все файлы в корзину.

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 
}
...