【问题标题】:Inconsistent PowerShell when command is called via Invoke-Command通过 Invoke-Command 调用命令时 PowerShell 不一致
【发布时间】:2020-07-31 17:15:58
【问题描述】:

我有一个简单的 Get-ScheduledTask 命令,它给我一个简单的输出:

    Get-ScheduledTask | select -last 1
    
    TaskPath                                       TaskName                          State
    --------                                       --------                          -----
    \Microsoft\Windows\WS\                         WSTask                            Ready

当我通过 Invoke-Command 调用相同的命令时(在与上述相同的计算机上运行),有时会得到非常相似的输出:

    Invoke-Command -ComputerName PRD-APIEXT001 -ScriptBlock {Get-ScheduledTask |select -last 1 } -Credential $cred
    
    TaskPath                                       TaskName                          State      PSComputerName
    --------                                       --------                          -----      --------------
    \Microsoft\Windows\WS\                         WSTask                            Ready      PRD-APIEXT001

但有时,我会得到更多更详细的输出:

    Invoke-Command -ComputerName PRD-APIEXT001 -ScriptBlock {Get-ScheduledTask |select -last 1} -Credential $cred
    
    
    PSComputerName     : PRD-APIEXT001
    RunspaceId         : [REDACTED]
    Actions            : {MSFT_TaskComHandlerAction}
    Author             : Microsoft Corporation
    Date               : 2010-10-27T17:18:44.0816608
    Description        : Windows Store Maintenance Task
    Documentation      :
    Principal          : MSFT_TaskPrincipal2
    SecurityDescriptor : [REDACTED]
    Settings           : MSFT_TaskSettings3
    Source             : wsservice.dll
    State              : 3
    TaskName           : WSTask
    TaskPath           : \Microsoft\Windows\WS\
    Triggers           :
    URI                : \Microsoft\Windows\WS\WSTask
    Version            :

我不知道为什么它有时是简单的输出,有时是详细的输出,除了它似乎只在一个方向上改变;从冗长到简单。也就是说,一旦 PowerShell 会话显示简单输出,它似乎永远不会回到详细输出。但有时一个曾经显示详细输出的会话会切换到简单的。

现在,我从this StackOverflow question 得知 Invoke-Command 会为其返回的每个对象添加属性。

但我仍然不知道为什么它有时会给出基于表格的输出,有时会给我一个属性列表作为输出。

谁能告诉我这里会发生什么?

我使用的是 PowerShell 版本 5.1.14409.1018。

【问题讨论】:

  • 远程电脑总是一样的?
  • 是的,它是我运行命令的同一台计算机。

标签: powershell powershell-remoting


【解决方案1】:

在加载 ScheduledTasks 模块之前,无论是使用 import-module 还是在本地运行 get-scheduledtask,似乎都没有加载该类型对象的显示信息。

Import-Module ScheduledTasks
icm localhost { get-scheduledtask | select -last 1 }  # elevated prompt for localhost

TaskPath                                       TaskName
--------                                       --------
\Microsoft\XblGameSave\                        XblGameSaveTaskLogon


Get-ScheduledTask | select -last 1 | get-member | findstr TypeName

TypeName: 
'Microsoft.Management.Infrastructure.CimInstance#Root/Microsoft/Windows/TaskScheduler/MSFT_ScheduledTask'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 2022-07-07
    • 1970-01-01
    • 2022-11-09
    相关资源
    最近更新 更多