Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting powershell将管道输入发送到管道_Sorting_Powershell_Pipe_Pipeline - Fatal编程技术网

Sorting powershell将管道输入发送到管道

Sorting powershell将管道输入发送到管道,sorting,powershell,pipe,pipeline,Sorting,Powershell,Pipe,Pipeline,我有一个接受管道参数的脚本。 我不能确定用户在管道传输到我的脚本之前已经通过Sort对象管道传输了他们的输入,所以我想在我开始在脚本中对其进行操作之前,将管道传输的输入发送出去进行排序(和其他处理) 该脚本具有以下参数: $script:creds $script:confObj function Get-ConfigureServerInput { <# #> [CmdletBinding(DefaultParameterSetName = "FromPipe")] Param

我有一个接受管道参数的脚本。 我不能确定用户在管道传输到我的脚本之前已经通过Sort对象管道传输了他们的输入,所以我想在我开始在脚本中对其进行操作之前,将管道传输的输入发送出去进行排序(和其他处理)

该脚本具有以下参数:

$script:creds
$script:confObj
function Get-ConfigureServerInput
{
<#
#>

[CmdletBinding(DefaultParameterSetName = "FromPipe")]

Param(
    [Parameter(ParameterSetName="FromUser", Mandatory=$true, Position=0)] [string[]]$ComputerName,
    [Parameter(ParameterSetName="FromUser", Mandatory=$true, Position=1)] [string[]]$AppName,
    [Parameter(ParameterSetName="FromUser", Mandatory=$true, Position=2)] [string[]]$key,
    [Parameter(ParameterSetName="FromUser", Mandatory=$true, Position=3)] [string[]]$setting,

    [Parameter(ParameterSetName="FromPipe", Mandatory=$true, ValueFromPipeline=$true)] [PSObject]$pobj,

    [Parameter(ParameterSetName="FromFile", Mandatory=$true)] [string]$File,

    [Parameter()] [switch]$force,
    [Parameter()] [switch]$mt,
    [Parameter()] [int]$MaxThreads = 0,
    [Parameter()] [System.Management.Automation.PSCredential]$Credentials
)

BEGIN
{
    #Runs once regardless of how many items are in the pipe
    If ($Credentials -ne $null) {$script:creds = $Credentials}

    Switch ($PSCmdlet.ParameterSetName)
    {
        "FromPipe" 
        {
            Write-Verbose "Input is from pipe"
            $script:confObj = $($pobj)
            break
        }
        "FromUser"
        {
            Write-Verbose "Input is from user arguments"
            $uObj = New-Object PSObject
            $uObj | Add-Member -type NoteProperty -name ComputerName -value $ComputerName
            $uObj | Add-Member -type NoteProperty -name AppName -value $AppName
            $uObj | Add-Member -type NoteProperty -name key -value $key
            $uObj | Add-Member -type NoteProperty -name setting -value $setting
            $script:confObj = $uObj
            break
        }
        "FromFile"
        {
            Write-Verbose "Input is from file"
            Write-Verbose "Import-CSV -Header 'ComputerName','AppName','key','setting' -path $File "
            $script:confObj = Import-CSV -Header "ComputerName","AppName","key","setting" -path $File 
            break
        }
    }
    $script:confObj
}
但是在BEGIN块中似乎没有$input变量。如果我在BEGIN块中放入$input | Get成员,我会得到错误:

Get-Member : No object has been specified to the get-member cmdlet.
At E:\Powershell\ConfigureServer\ConfigureServer.psm1:53 char:22
+         $input | Get-Member <<<<
    + CategoryInfo          : CloseError: (:) [Get-Member], InvalidOperationException
    + FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand
这里显示的是让成员看到我得到了一个对象

   TypeName: System.Management.Automation.PSCustomObject

Name         MemberType   Definition
----         ----------   ----------
Equals       Method       bool Equals(System.Object obj)
GetHashCode  Method       int GetHashCode()
GetType      Method       type GetType()
ToString     Method       string ToString()
AppName      NoteProperty System.String AppName=garbage
ComputerName NoteProperty System.String ComputerName=google.com
key          NoteProperty System.String key=trash
setting      NoteProperty System.String setting=null
使用-File或-ComputerName(以及其他必需的参数)调用它会生成我所期望的对象。e、 g:

PS E:\Powershell\ConfigureServer> Get-ConfigureServerInput -Verbose -File duplicates.dat
VERBOSE: Input is from file
VERBOSE: Import-CSV -Header 'ComputerName','AppName','key','setting' -path duplicates.dat

ComputerName                  AppName                       key                           setting
------------                  -------                       ---                           -------
google.com                    garbage                       trash                         null
alpha                         nonsense                      nilhilist                     nil
yahoo.com                     aname                         akey                          avalue
alpha                         nonsense                      nilhilist                     nil
yahoo.com                     aname                         akey                          avalue

使用管道输入调用不会返回任何输出。

必须使用已声明的参数:
$ComputerName
$AppName
$key
$setting


您可能可以使用
addmember
重新构造与原始对象类似的对象,然后对它们进行排序。

为了使这更通用,我真正想做的是在处理process块中的单个元素(foreach)之前,在BEGIN块中预处理整个管道。我想对管道进行排序并删除重复项。
   TypeName: System.Management.Automation.PSCustomObject

Name         MemberType   Definition
----         ----------   ----------
Equals       Method       bool Equals(System.Object obj)
GetHashCode  Method       int GetHashCode()
GetType      Method       type GetType()
ToString     Method       string ToString()
AppName      NoteProperty System.String AppName=garbage
ComputerName NoteProperty System.String ComputerName=google.com
key          NoteProperty System.String key=trash
setting      NoteProperty System.String setting=null
PS E:\Powershell\ConfigureServer> Get-ConfigureServerInput -Verbose -File duplicates.dat
VERBOSE: Input is from file
VERBOSE: Import-CSV -Header 'ComputerName','AppName','key','setting' -path duplicates.dat

ComputerName                  AppName                       key                           setting
------------                  -------                       ---                           -------
google.com                    garbage                       trash                         null
alpha                         nonsense                      nilhilist                     nil
yahoo.com                     aname                         akey                          avalue
alpha                         nonsense                      nilhilist                     nil
yahoo.com                     aname                         akey                          avalue