Жестко зашифрованные учетные данные для запуска в Powershell

Я наконец-то заставил этот скрипт powershell работать со всей вашей помощью!!!!

$line_array = @()
$multi_array = @()
[hashtable]$my_hash = @{}

foreach ($i in $args){
   $line_array+= $i.split(" ")
}

foreach ($j in $line_array){
    $multi_array += ,@($j.split("="))
}

foreach ($k in $multi_array){
    $my_hash.add($k[0],$k[1])
}

$Sender_IP = $my_hash.Get_Item("sender-ip")

$eventList = @()
Get-EventLog "Security" -computername $Sender_IP `
    | Where -FilterScript {$_.EventID -eq 4624 -and $_.ReplacementStrings[4].Length -gt 10 -and $_.ReplacementStrings[5] -notlike "*$"} `
    | Select-Object -First 2 `
    | foreach-Object {
        $row = "" | Select UserName, LoginTime
        $row.UserName = $_.ReplacementStrings[5]
        $row.LoginTime = $_.TimeGenerated
        $eventList += $row
        }
$userId = $eventList[0].UserName
$userId

Может быть вызван с

.\FOO.ps1 sender-ip=10.2.23.40 sender-name=joe sender-id=djoe

Но теперь мне нужно подготовить его для вызова этой сторонней программы. Сценарий выдаст вывод (т. е. для заданного IP-адреса найдет последнего пользователя, вошедшего в систему) только в том случае, если он работает как учетная запись службы. Это означает, что при тестировании сценария я могу выбрать «Запуск от имени» и ввести учетные данные учетной записи службы.

Сторонняя программа не запускается с использованием учетных данных службы, что означает, что я должен делать это на стороне программы.

Как заставить эту программу запускаться как сервисная учетная запись автоматически? Как бы я жестко запрограммировал это? И имя пользователя и пароль должны быть зашифрованы.

Можете ли вы указать мне правильное направление?

EDIT: я читаю эту ссылку, http://blogs.technet.com/b/robcost/archive/2008/05/01/powershell-tip-storing-and-использование-пароля-credentials.aspx

И это показывает, как закачать зашифрованный пароль в файл

PS C:\> read-host -assecurestring | convertfrom-securestring | out-file C:\cred.txt

А затем верните его в сценарий

PS C:\> $password = get-content C:\cred.txt | convertto-securestring

И создайте объект учетных данных

PS C:\> $credentials = new-object -typename System.Management.Automation.PSCredential -argumentlist "myusername",$password

Но я все еще пытаюсь понять, как запустить скрипт, используя эти учетные данные.


person Glowie    schedule 08.08.2013    source источник


Ответы (1)


Я бы предположил, что решающим моментом (точкой, где вы используете альтернативные учетные данные) является командлет Get-EventLog. Этот командлет не поддерживает -Credential, но вместо него можно использовать Get-WinEvent. Вероятно, это означало бы, что вам нужно изменить фильтр where. Я бы предложил также перенести часть (все?) фильтра в командлет Get-WinEvent:

Get-WinEvent -FilterHashtable @{ 
    ID = 4624
    LogName = 'Security' 
} -ComputerName $Sender_IP -Credential $Credential

Кстати: если вы храните учетные данные с помощью convertTo/From-SecureString, они будут работать только для учетной записи, выполняющей операцию (поэтому, если ваш сторонний инструмент работает с другими учетными данными, он не сможет обрабатывать созданные вами учетные данные).

person BartekB    schedule 09.08.2013