【问题标题】:Powershell script as a step in sql job giving errorPowershell脚本作为sql作业中的一个步骤给出错误
【发布时间】: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


【解决方案1】:

Jaspreet 我不是 powershell 专家,但似乎您传递了错误的参数。仅参考 Microsoft 文档似乎您需要传递计算机名称而不是 -Session 在开始时尝试使用这行代码 调用命令-计算机名称服务器名称。 有关更多信息,请参阅 Microsoft 文档 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/invoke-command?view=powershell-6#examples

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多