【发布时间】:2018-04-26 06:36:30
【问题描述】:
我正在尝试创建一个将用户从 csv 文件同步到广告组的 sql 作业。 我的 powershell 脚本是这项工作的步骤之一。问题是我的脚本应该在另一台具有 Active Directory 的服务器上运行,但是当我运行此步骤时,我不断收到错误。
我的脚本如下:
invoke-Command -Session Server-Name
Import-Module activedirectory
$ADUsers = Import-csv \\Server-Name\folder\file.csv
foreach ($User in $ADUsers)
{
$Username = $User.sAMAccountName
$group=$user.adgroup
if (Get-ADUser -F {SamAccountName -eq $Username})
{
foreach($group in $groups){Add-ADGroupMember -identity $group -Members $Username}
Write-Output "$username has beeen added to group $group"
}
}
我得到的错误是
以用户身份执行:用户名。作业步骤在 PowerShell 脚本的第 2 行收到错误。对应的行是'Invoke-Command -Session Server-Name。更正脚本并重新安排作业。 PowerShell 返回的错误信息是:'Cannot bind parameter 'Session'。无法将“System.String”类型的“Server-Name”值转换为“System.Management.Automation.Runspaces.PSSession”类型。 '。处理退出代码-1。步骤失败。
服务器名称之间有“-”,因此需要知道这是否导致问题 或者我使用错误的方式在与 sql 作业不同的服务器上运行此脚本
任何帮助将不胜感激!
【问题讨论】:
-
用于 AD 同步的 SQL 作业似乎是个奇怪的想法。为什么会这样?
-
在此之前的一步创建包含来自数据库的电子邮件和组的 csv 文件的导出。我希望整个过程自动化。这就是我创建此同步的原因
-
你检查help for Invoke-Command了吗?该错误消息为您提供了有关问题所在的线索:您正在尝试将服务器名称传递到它期望会话对象的位置。要么首先创建一个会话(使用
New-PSSession),要么使用-ComputerName参数而不是-Session参数。此外,您需要将要在远程服务器上运行的代码包装在一个脚本块中:{...}作为Invoke-Command的一部分。 -
@boxdog 非常感谢它的工作。
-
@boxdog .... 你的评论帮助了我,当事情变得扭曲时,在一个函数中运行它并且在找到这个评论并阅读它之后,叮,叮,叮,这也为我修复了它... Du'oh ....会话名称,而不是服务器名称....哇....如果您将此作为答案写下来,请给我回标签,这样我就可以投票了,我假设OP会接受,因为他的评论说它也解决了这个问题。
标签: sql powershell sql-server-2012 sql-job