Использование удаления элемента с учетными данными

StackOverflow https://stackoverflow.com/questions/3064998

Вопрос

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

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

$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

Есть идеи?

Это было полезно?

Решение

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

$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 

Другие советы

Удаление-элемент может потерпеть неудачу из-за авторизации. В качестве альтернативы либо найдите ссылку для каждого файла и нажмите его с помощью .delete (), либо переместите все файлы в корзину Recycle.

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 
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top