Я пытаюсь запустить скрипт powershell, используя Invoke-SqlCmd2
. По разным причинам мне нужно выполнить sql как определенную учетную запись Windows, для которой у меня есть учетные данные.
Первоначальный процесс, который выполняется, не выполняется как учетная запись домена, поэтому я использую учетные данные, которые необходимо создатьновый объект Credential, а затем используйте его для создания New-PSSession
:
$password = ConvertTo-SecureString $credentialPass -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ($credentialUser, $password)
$sess = New-PSSession -credential $cred
Затем я Invoke-Command
запускаю новый сеанс powershell от имени моего предоставленного пользователя.
Invoke-Command -Session $sess -ScriptBlock $sb
Внутри этого (блок сценария, файл и т. Д.) Я затем пытаюсь выполнить Invoke-SqlCmd2
как доверенное соединение
$resultListTable = Invoke-Sqlcmd2 -query $query -ServerInstance $ServerInstance -Database $db -As "DataTable" -Debug
Сгенерированная строка соединения: Data Source=ZZZZ;Initial Catalog=XXXX;Integrated Security=True;Connect Timeout=15
, но в результате получается ошибка:
Исключительная ситуация при вызове "Open" с аргументом (ами) "0": "Ошибка входа пользователя 'NT AUTHORITY \ ANONYMOUS LOGON'."
Этот результат меня удивилЯ ожидал, что New-PSSession
решит эту проблему для меня. С этой целью я попытался отладить вещи немного больше и добавил следующий код, чтобы объяснить мне, от какого пользователя, по мнению сценария, он работает.
$s = @"
** From .Net Environment : [$([Environment]::UserDomainName)\$([Environment]::UserName)]
** From windows access token : [$([Security.Principal.WindowsIdentity]::GetCurrent().Name)]
** From ps environment variables: [$($env:userdomain)\$($env:username)]
** From whoami : [$(whoami)]
** From WMI object : [$(Get-WMIObject -class Win32_ComputerSystem | select username).username]
** From ps environment variables: [$($env:userdomain)\$($env:username)]
"@
Write-Host $s
, который выдает следующий вывод (перед тем, как сказать мне, что «NT AUTHORITY \ ANONYMOUS LOGON» не может войти в систему)
** Из среды .Net: [DOMAIN \ user]
** Из токена доступа Windows: [DOMAIN \ user]
** Из переменных среды ps: [DOMAIN \ user]
** От whoami: [DOMAIN \ user]
** Из WMIobject: [@ {username = DOMAIN \ brian} .username]
** Из переменных среды ps: [DOMAIN \ user]
На поверхности, кажется, нетВозможный способ использования анонимного входа. Сценарий, очевидно, выполняется от имени моего указанного пользователя (хотя объект WMI по-прежнему ссылается на меня).
Но, что еще более очевидно, это не так. Здесь должен быть еще один активный слой, которого я просто не вижу, какое-то недопонимание того, как на самом деле работает powershell.
Итак, основной, основной вопрос ... Как настроить сеанс powershell так, чтобыкогда запускается командлет Invoke-SqlCmd2
, он работает как DOMAIN\user
?
Примечания
Я не думаю , что удаленное взаимодействие здесь, так как я 'м всегда на одной машине. Но, может быть, это не имеет значения ...