【问题标题】:Query SCCM from Task Sequence - is it possible?从任务序列查询 SCCM - 可能吗?
【发布时间】:2011-07-28 17:28:02
【问题描述】:

我有一个在我的工作站上运行良好的 VBscript。它查询 SCCM 以找出计算机所在的域。当我将它作为任务序列的一部分运行时,它失败了。请注意,这几乎是任务序列中的最后一步,在 Windows 7 下,而不是在 Windows PE 下。

Option Explicit

Const wbemFlagReturnImmediately = &H10
Const wbemFlagForwardOnly = &H20

Dim computerName, userName, userPassword, server
Dim swbemLocator, swbemServices, providerLoc
Dim location, connection
Dim query, found, resource, resources

'--- Settings ---
userName = "domain\username"
userPassword = "password"
server = "domain.com"  

'--- Get computer name ---
computerName = CreateObject("WScript.Network").ComputerName
WScript.Echo"Computer name: " & computerName

'--- Connect ----
Set swbemLocator = CreateObject("WbemScripting.SWbemLocator")
swbemLocator.Security_.AuthenticationLevel = 6
Set swbemServices = swbemLocator.ConnectServer(server, "root\sms",userName,userPassword)
Set providerLoc = swbemServices.InstancesOf("SMS_ProviderLocation")
For Each location In providerLoc
    If location.ProviderForLocalSite = True Then
        WScript.Echo "SiteCode: " & location.SiteCode       
        Set connection = swbemLocator.ConnectServer(server, "root\sms\site_" + location.SiteCode)
    Else
        WScript.Echo "Not provider for local site."
    End If
Next

'--- Query & output ---
query = "SELECT * FROM SMS_FullCollectionMembership WHERE name = '" & computerName & "'"
Set resources = connection.ExecQuery(query, , wbemFlagForwardOnly Or wbemFlagReturnImmediately)
found = False
For Each resource In resources
    WScript.Echo "Domain: " & resource.Domain & " (" & resource.CollectionID & ")"
    found = True
    Exit For
Next
If Not found Then WScript.Echo "Computer not found!"

如果我打开一个运行任务序列的命令提示符(在 Windows 7 下使用 F8,而不是 Windows PE)并运行脚本,我会得到:

SWbemLocator:访问被拒绝

上线:

Set connection = swbemLocator.ConnectServer(server, "root\sms\site_" + location.SiteCode)

有什么想法吗?或者,关于如何找出计算机上次构建时所在域的任何其他建议?

【问题讨论】:

    标签: wmi sccm sccm-2007


    【解决方案1】:

    您的任务序列在本地系统帐户的上下文中运行,默认情况下,此帐户在 SCCM 中没有权限。

    如果您在 SCCM 管理控制台、安全权限、用户中定义“您的域\域计算机”,并授予他们对 Collection 的读取和读取资源权限,您​​应该能够连接到您的 SCCM 服务器。

    请注意,您必须在要连接的所有站点服务器上执行此操作,这些定义不会在站点之间复制。

    【讨论】:

      【解决方案2】:

      我意识到这是一个非常古老的帖子,但我自己也遇到了这个问题。 您已经在脚本中拥有用户名和密码,这里使用它

      Set swbemServices = swbemLocator.ConnectServer(server, "root\sms",userName,userPassword)
      

      但是再往下一点,您在没有用户名和密码的情况下连接到该站点。

      Set connection = swbemLocator.ConnectServer(server, "root\sms\site_" + location.SiteCode)
      

      试试这个:

      Set connection = swbemLocator.ConnectServer(server, "root\sms\site_" + location.SiteCode, userName, userPassword)
      

      希望这对某人有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-09
        • 1970-01-01
        • 2022-01-04
        • 2021-12-17
        • 1970-01-01
        • 2022-11-14
        • 2014-01-05
        相关资源
        最近更新 更多