运行 使用 Ruby/WinRM 从 Linux 交换 Powershell 命令
Run Exchange Powershell commands from Linux using Ruby/WinRM
我正在尝试从 ruby 脚本为 Active Directory 中的现有用户 运行 启用邮箱命令。我正在使用 this winrm gem。到目前为止,我已经能够使用 winrm 和 kerberos 身份验证连接到交换服务器。我可以 运行 交换管理 shell 来自 powershell。从那里我可以执行交换命令。
但是,当我尝试 运行 启用邮箱时,出现以下错误:
Active Directory operation failed on . The supplied credential for
'domain\account' is invalid.
'operation failed on .' 是逐字逐句的。 space 中没有您认为应该有的文本。 domain\account 与我用来通过 kerberos 成功连接 winrm 的那个相同。
这是我的简单代码:
endpoint = 'http://server:5985/wsman'
krb5_realm = 'myrealm'
winrm = WinRM::WinRMWebService.new(endpoint, :kerberos, :realm => krb5_realm)
#exch_cmd = "Get-Help Enable-Mailbox" NOTE THAT THIS COMMAND WORKS FINE
exch_cmd = "Enable-Mailbox -Identity:'user DN' -Alias:'username' -Database:'mailbox'"
command = "powershell -psconsolefile \"C:\Program Files\Microsoft\Exchange Server\V15\bin\exshell.psc1\" -command \". "+exch_cmd+"\""
winrm.cmd(command) do |stdout, stderr|
STDOUT.print stdout
STDERR.print stderr
end
感谢您的帮助!
我们设法让它发挥作用。我必须先连接到 'management' 服务器才能启动 powershell 命令。
endpoint = 'http://YOURSERVER:5985/wsman'
krb5_realm = 'YOURREALM'
winrm = WinRM::WinRMWebService.new(endpoint, :kerberos, :realm => krb5_realm)
然后我不得不将交换命令修改为:
exch_cmd = "Enable-Mailbox -Identity:'DOMAIN/OU/#{fullname}' -Alias:'#{username}' -Database:'#{MailboxDB}'"
command = "powershell -NonInteractive -WindowStyle Hidden -command \" $username = '#{account}'; $password = ConvertTo-SecureString '#{password}' -asplaintext -force; $UserCredential = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist $username,$password; $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri #{server} -Authentication Kerberos -Credential $UserCredential; Invoke-Command -Session $Session {#{exch_cmd}}\""
在管理和 Exchange 服务器上,服务帐户需要在远程管理组中。您还需要根据本指南更新 SDDL:http://www.sevecek.com/Lists/Posts/Post.aspx?ID=280 根据您的服务器配置,这会有所不同。
我正在尝试从 ruby 脚本为 Active Directory 中的现有用户 运行 启用邮箱命令。我正在使用 this winrm gem。到目前为止,我已经能够使用 winrm 和 kerberos 身份验证连接到交换服务器。我可以 运行 交换管理 shell 来自 powershell。从那里我可以执行交换命令。
但是,当我尝试 运行 启用邮箱时,出现以下错误:
Active Directory operation failed on . The supplied credential for 'domain\account' is invalid.
'operation failed on .' 是逐字逐句的。 space 中没有您认为应该有的文本。 domain\account 与我用来通过 kerberos 成功连接 winrm 的那个相同。
这是我的简单代码:
endpoint = 'http://server:5985/wsman'
krb5_realm = 'myrealm'
winrm = WinRM::WinRMWebService.new(endpoint, :kerberos, :realm => krb5_realm)
#exch_cmd = "Get-Help Enable-Mailbox" NOTE THAT THIS COMMAND WORKS FINE
exch_cmd = "Enable-Mailbox -Identity:'user DN' -Alias:'username' -Database:'mailbox'"
command = "powershell -psconsolefile \"C:\Program Files\Microsoft\Exchange Server\V15\bin\exshell.psc1\" -command \". "+exch_cmd+"\""
winrm.cmd(command) do |stdout, stderr|
STDOUT.print stdout
STDERR.print stderr
end
感谢您的帮助!
我们设法让它发挥作用。我必须先连接到 'management' 服务器才能启动 powershell 命令。
endpoint = 'http://YOURSERVER:5985/wsman'
krb5_realm = 'YOURREALM'
winrm = WinRM::WinRMWebService.new(endpoint, :kerberos, :realm => krb5_realm)
然后我不得不将交换命令修改为:
exch_cmd = "Enable-Mailbox -Identity:'DOMAIN/OU/#{fullname}' -Alias:'#{username}' -Database:'#{MailboxDB}'"
command = "powershell -NonInteractive -WindowStyle Hidden -command \" $username = '#{account}'; $password = ConvertTo-SecureString '#{password}' -asplaintext -force; $UserCredential = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist $username,$password; $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri #{server} -Authentication Kerberos -Credential $UserCredential; Invoke-Command -Session $Session {#{exch_cmd}}\""
在管理和 Exchange 服务器上,服务帐户需要在远程管理组中。您还需要根据本指南更新 SDDL:http://www.sevecek.com/Lists/Posts/Post.aspx?ID=280 根据您的服务器配置,这会有所不同。