如何使用Powershell脚本在Azure Active Directory中使用已注册的应用程序运行过程

时间:2019-04-19 07:53:23

标签: c# azure powershell

我正在尝试创建一个Powershell脚本,该脚本以系统用户帐户启动进程。我想在AAD中使用注册的应用程序作为该系统用户帐户。

这是我创建的代码。

$ApplicationId = "My ApplicationID"
$ServicePrincipalSecret = "My Application's secret Key"
$SecurePassword = ConvertTo-SecureString –String $ServicePrincipalSecret –AsPlainText -Force
$Credential = New-Object System.Management.Automation.PsCredential ($ApplicationId, $SecurePassword)
Start-Process -FilePath notepad -Credential $Credential

此代码无效。并返回以下错误消息。

  

Start-Process:由于以下错误,无法运行此命令:用户   名称或密码不正确。在第1行:char:1   + Start-Process -FilePath记事本-Credential $ Credential   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~       + CategoryInfo:InvalidOperation :( :) [开始进程],InvalidOperationException       + FullyQualifiedErrorId:InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand

我尝试使用以下命令来检查$ Credential是否正确,并成功连接了Azure。因此,我的凭据对象已正确创建。

Connect-AzureRmAccount-凭据$ Credential-租户“我的Azure租户ID” -ServicePrincipal

我还尝试了以下代码。

$psinfo = New-Object System.Diagnostics.ProcessStartInfo
$psinfo.FileName = "notepad"
$psinfo.UserName = $ApplicationId
$psinfo.Password = $SecurePassword
$psinfo.Verb = "runasuser"
$psinfo.UseShellExecute = 0
$psinfo.LoadUserProfile = 0
$ps = New-Object System.Diagnostics.Process
$ps.StartInfo = $psinfo
$ps.Start()

此代码也不起作用。并返回以下错误消息。

  

使用“ 0”参数调用“开始”的异常:“存根接收错误   data“ at line:1 char:1   + $ ps.Start()   + ~~~~~~~~~~~~       + CategoryInfo:未指定:(:) [],MethodInvocationException       + FullyQualifiedErrorId:Win32Exception

是否有一种好的方法来使用有资格管理Azure Active Directory的用户帐户(与实际运行脚本的用户不同)来启动进程?如果有人给我任何建议,将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分:0)

尝试以下类似方法。它对我有用。

pagination

这是当您想提示输入凭据时使用的,否则您可以在命令下面简单使用

$uid = "Domain\username"
$pwd = "#pwd"
$Args = "-Verb RunAs -Wait -passthru"
$MyCredential=New-Object -TypeName System.Management.Automation.PSCredential `
-ArgumentList $Uid, ($pwd | ConvertTo-SecureString -AsPlainText -Force)
Start-Process -FilePath C:\windows\system32\system32\notepad.exe -Credential ($cred) -Argumentlist $Args

请检查此内容,看看它是否适合您,否则请与您联系。

答案 1 :(得分:0)

我发现我的问题是由于与不存在的用户进行身份验证。 Azure Active Directory中的已注册应用程序不会同步到Azure Active Directory域服务。因此,即使我尝试使用AAD应用程序服务主体凭据对AADDS进行更改/更新,身份验证也会失败。 使用AAD用户对象代替服务主体对我有用。 谢谢。