使用Invoke-Command获取Get-ADComputer的结果

时间:2018-04-11 16:13:57

标签: powershell active-directory invoke-command

我正在开发一个脚本,该脚本将在没有安装任何RSAT工具的客户端(桌面)Windows机器上运行。该脚本将轮询有关该机器的各种内容,其中一个我想要包括的是Active Directory中的机器描述。最终目标是将这些保存到SQL中以获得漂亮的表。

我能够获得除AD描述之外的所有内容。这就是我现在正在尝试的事情:

CREATE TABLE sd_user_feed_notification
( user_id               INT NOT NULL COMMENT 'PK, FK ref user.id'
, feed_notification_id  INT NOT NULL COMMENT 'PK, FK ref feed_notification.id'
, PRIMARY KEY (user_id, feed_notification_id)
, KEY sd_user_feed_notification_IX (feed_notification_id, user_id)

, CONSTRAINT FK_sd_user_feed_notification_user 
  FOREIGN KEY (user_id)              REFERENCES sd_user (id) 
  ON UPDATE CASCADE ON DELETE CASCADE 

, CONSTRAINT FK_sd_user_feed_notification_feed
  FOREIGN KEY (feed_notification_id) REFERENCES sd_feed_notification (id)
  ON UPDATE CASCADE ON DELETE CASCADE

) ENGINE=InnoDB
;

我知道正在传递计算机名称,因为

的结果
$Computer = (Get-WmiObject Win32_ComputerSystem | Select -Expand Name) | Out-String

$session = New-PSSession -ComputerName domainController
Invoke-Command -Session $session -ScriptBlock {
param(
   [Parameter(Position=0)]
   $computer
)

Import-Module ActiveDirectory

write-host "the value of the passed parameter is $computer"

Get-ADComputer -SearchBase 'DC=CONTOSO,DC=LOCAL' -Filter {Name -Like $computer} -Properties Description | Select -Expand Description

write-host "the name of this computer is $(Get-WmiObject Win32_ComputerSystem | Select -Expand Name)"

write-host $description

 } -ArgumentList $Computer

确实显示了我传递的计算机的名称。我知道该命令确实在服务器上运行,因为

的结果
write-host "the value of the passed parameter is $computer"

确实显示安装了ADUC的服务器的名称。我知道拉取描述的命令在该服务器上工作,因为如果我使用RDP连接到所述服务器,我可以毫无问题地运行该命令。

我没有得到任何错误(我的$ ErrorActionPreference是“停止”),它只是简单地跳过代码行,就像它是一个注释。

我有什么遗漏,或者更好的方式让我拉出所说的电脑的描述?

1 个答案:

答案 0 :(得分:2)

您无需远程从Active Directory请求信息。这是一个甚至不使用AD cmdlet的简短示例:

$computerName = [Net.Dns]::GetHostName()

$searcher = [ADSISearcher] "(sAMAccountName=$computerName$)"
$searcher.PropertiesToLoad.AddRange(@("description"))
$searchResult = $searcher.FindOne()

"Computer description: {0}" -f $searchResult.Properties["description"][0]