Не используйте простые текстовые пароли в сценариях, особенно при использовании прав администратора. Вы подвергаете себя и свою организацию ненужным рискам.
Если вы не хотите, чтобы во время выполнения скрипта запрашивались кредиты, вам необходимо заранее их сохранить в безопасном режиме и оттуда звонить. В Интернете существует множество статей о защите учетных данных в сценариях PowerShell, использовании диспетчера учетных данных Windows, защищенных XML-файлов или даже реестра.
Это ...
Start-Process powershell -ArgumentList "-noexit -command & {$scriptBlock} $cred"
... неверный синтаксис. Должно быть это ...
Start-Process powershell -ArgumentList "-noexit -command & {$scriptBlock}" -Credential $Cred
Start-Process - у него есть свойство учетных данных.
Наконец, если вы запускаете это со своей рабочей станции, и у вас есть разрешения для этого, тогда почему вы вообще передаете кредиты?
Ваш интерактивный вход в систему, если вы вошли в систему с учетной записью, у которой есть привилегии на цели, это будет просто работать, и вам вообще не понадобится Start-Process.
Например, просто делать это ...
# share enumeration and Test-Path
# Using variable squeezing to assign and output variable, debug validation effort
# $scriptBlock = {
# Pick a random AD computer and show all shares
"`n***"
"*** List all share data ***"
"***`n"
($shares = Get-WmiObject -Class Win32_Share -ComputerName (Get-ADComputer -Filter '*').Name[7])
# Process test validation
"`n***"
"*** Testing share path ***"
"***`n"
foreach ($share in $shares)
{ ($sharename = "\\$($share.PSComputerName)\$($share.Name)") + ' : ' + ($path = Test-Path -Path $sharename)}
# }
Получил бы это ...
# Results
***
*** List all share data ***
***
Name Path Description
---- ---- -----------
ADMIN$ C:\Windows Remote Admin
C$ C:\ Default share
install C:\install
IPC$ Remote IPC
print$ C:\Windows\system32\spool\drivers Printer Drivers
***
*** Testing share path ***
***
\\LabServer01\ADMIN$ : True
\\LabServer01\C$ : True
\\LabServer01\install : True
\\LabServer01\IPC$ : False
\\LabServer01\print$ : True
Теперь, если у ваших авторизованных кредитов не было разрешений, тогда, да, передайте их ...
($cred = Get-Credential -Credential "$env:USERDOMAIN\$env:USERNAME")
... в Start-Process или, что еще лучше, Invoke-Command , если PSRemoting включен.
($cred = Get-Credential -Credential "$env:USERDOMAIN\$env:USERNAME")
Invoke-Command -ComputerName $((Get-ADComputer -Filter '*').Name[7]) -ScriptBlock {
# Pick a random AD computer and show all shares
"`n***"
"*** List all share data on $env:COMPUTERNAME ***"
"***`n"
($shares = Get-WmiObject -Class Win32_Share -ComputerName $env:COMPUTERNAME)
# Process test validation
"`n***"
"*** Testing share path ***"
"***`n"
$shares | ForEach-Object {
Write-Host "Testing $($PSItem.Name) : " -NoNewline
Try {Test-Path -Path $PSItem.Path}
Catch{"Path for $($PSItem) is empty"}
}
} -Credential $cred
# Results
***
*** List all share data on LabServer01 ***
***
Name Path Description PSComputerName
---- ---- ----------- --------------
ADMIN$ C:\Windows Remote Admin LabServer01
C$ C:\ Default share LabServer01
install C:\install LabServer01
IPC$ Remote IPC LabServer01
print$ C:\Windows\system32\spool\drivers Printer Drivers LabServer01
***
*** Testing share path ***
***
Testing ADMIN$ : True
Testing C$ : True
Testing install : True
Testing IPC$ : Path for Cannot bind argument to parameter 'Path' because it is an empty string. is empty
Testing print$ : True