【问题标题】:Powershell query works in prompt, but not in scriptPowershell 查询在提示中有效,但在脚本中无效
【发布时间】:2013-02-08 19:21:31
【问题描述】:

我正在尝试制作一个脚本,该脚本接受主机名的输入并告诉我当前登录的用户。当我在 powershell 提示符下(作为管理员)一一运行命令时它可以工作,但是当我运行实际脚本本身时不会产生预期的输出。

以下是相关代码:

$Row.Hostname = $Hostname
$getwmiobject = Get-WmiObject -class Win32_computersystem -computername $Hostname
$Username = $Getwmiobject.username

    if($UserName -eq $NULL) {
    $Row.Username = "No Current Logged on User"
    }
        else {$Row.Username = $Username
    }

$csvfile += $Row

$csvfile |sort-object Hostname | Export-Csv "foo.csv

在命令行中运行时,我得到了正确的用户。当作为脚本运行时,我得到“没有当前登录用户”。我不知道为什么会这样。

编辑:我想值得一提的是,我已将输出写入文件,并在上面的代码中进行了更改。

【问题讨论】:

  • 请提供完整的脚本,至少是param() 部分,以及围绕您的示例的代码。示例是否与脚本相同,或者您是否从多个地方复制/粘贴给我们一个示例(可能是变量范围问题)。最后,您是否在具有管理员权限的控制台中编写了脚本?
  • 对不起,我现在明白的更清楚了。这是脚本末尾的摘录。我唯一没有包括的是它是如何获得 $Hostname 变量的,但这并不重要
  • 好的。您可以在get-wmiobject... 部分之前插入Write-Host "Hostname is: $Hostname"; Write-Host "Hostname is of type: $($Hostname.gettype().name) 并查看它是否输出有效的主机名和“字符串”作为类型? :)
  • 它提取的所有主机名都作为有效字符串输出。如果$hostnames 的长度也小于1,我有一张支票,上面写着"No Hostname to lookup user"
  • 权利呢?你也以管理员身份运行脚本吗?

标签: powershell windows-server-2008-r2 powershell-3.0 domaincontroller


【解决方案1】:

检查您为$Hostname 变量输入的任何额外字符,例如换行符`n。当你输入它时,它可能不会给你一个错误并且工作,因为它不需要处理这样的事情。

【讨论】:

  • 就是这样。每个主机名的末尾都有一个 `n,因此它可以向数组中添加一个新主机名。把那条线拿出来,它起作用了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 2014-08-13
  • 2022-01-12
  • 1970-01-01
  • 2015-10-17
  • 2017-10-12
  • 2022-12-10
相关资源
最近更新 更多