PowerShell,哈希表:添加对象?

时间:2014-06-06 07:17:26

标签: powershell hash

我需要打开几个对象:两个插槽,每个插槽都有一个Stream和一个Writer,一个管道带有......

我可以将它们存储在哈希中,以便我只使用哈希调用一个函数,在该函数中我可以访问特定的套接字,流或编写器吗?

如何预定义此哈希条目?

 $hash = @{
   ...
   "Socket" = ???
   "Stream" = ???
   "Writer" = ???
 ...
 }

 function connect {
    param([hashtable] $h)
    try {
        $Enc = [System.Text.Encoding]::ASCII
        $h.Socket = New-Object System.Net.Sockets.TcpClient $h.IP, $h.PORT
        $h.Stream = $h.Socket.GetStream() # Or better: $($h.Socket).GetStream()
        $h.Writer = New-Object System.IO.StreamWriter($h.Stream, $Enc)
        ...
    }
    catch { ...}
    ...
 }

并使用所有:

 function WriteMsg {
     param([hashtable]]$h, [string]]$m)
     try {
        $h.Writer.Write($m) #
     }
     catch {
        Write-Host $_ #Write-Debug $_
     }
 }

会保存使用吗?

PS:

对于那些可能感兴趣的人来说,这似乎有用 - 到目前为止:

$Conn1 = New-Object psobject -Property @{
     "ID"     = "Conn1"
     "State"  = "ok"

     "IP"     = "127.0.0.1"
     "PORT"   = 4711
     "Socket" = $Null
     "Stream" = $Null
     "Writer" = $Null
}

function conn { # Usage: conn $Conn1
     param (
        [parameter(Mandatory=$true)]
        [PSObject] $h
    )
     try {
          $e = [System.Text.Encoding]::ASCII
          $h.Socket = $(New-Object System.Net.Sockets.TcpClient $h.IP, $h.PORT)
          if ($h.Socket.Connected) {
                $h.Stream = $($h.Socket.GetStream())
                $h.Writer = $(New-Object System.IO.StreamWriter( $h.Stream, $e))
                $h.Writer.AutoFlush = $true
          }
     }
     catch {
        Write-Host "$($h.ID) Connection Failed $_" #Write-Debug $_
    }
    finally {
        return
    }
}

即使重新连接也不会因双重输入而失败。

0 个答案:

没有答案