2011-04-11 13 views
6

क्या PowerShell (PowerShell Remoting द्वारा निष्पादित) से क्रमबद्ध और deserializing वस्तुओं के लिए दिनचर्या उपलब्ध हैं?पावरशेल रिमोटिंग सीरियलाइजेशन और Deserialization

मैं डिस्क पर ऑब्जेक्ट्स (निर्यात-क्लाइक्सएमएल के साथ) लिखने से बचाना चाहता हूं और इसे वापस (आयात-क्लाइक्सएमएल) के साथ पढ़ना चाहता हूं।

असल में, मैं संपत्ति बैग को प्राप्त करना चाहता हूं जो deserialization बनाता है ताकि मैं उन्हें एक AppFabric ऑब्जेक्ट कैश में जोड़ सकूं। अन्यथा, AppFabric .NET serialization का उपयोग करने का प्रयास करता है, जो मानक ऑब्जेक्ट प्रकारों की संख्या में विफल रहता है।

शायद $ होस्ट या $ executioncontext चर के माध्यम से?

+0

आप पढ़ सकते हैं [वस्तु सीरियलाइजेशन निर्देश] (http://blogs.msdn.com/b/powershell/archive/2007/05/01/object-serialization-directives.aspx) और [दूरस्थ सत्रों से और कैसे ऑब्जेक्ट भेजे जाते हैं] (http:/जेफरी स्नोवर से /blogs.msdn.com/b/powershell/archive/2010/01/07/how-objects-are-sent-to-and-from-remote-sessions.aspx)। मुझे यकीन नहीं है कि यह आपको समाधान देता है, लेकिन शायद एक सुराग। – JPBlanc

+0

धन्यवाद @ जेपीब्लैंक। मैंने उन पदों को पढ़ा है और जब वे मुझे बता रहे हैं कि क्या हो रहा है, तो मुझे उम्मीद है कि इसे लागू करने के लिए पहिया का पुन: आविष्कार नहीं करना पड़ेगा .. –

+0

@ स्टेव, क्या आप कोशिश कर रहे हैं कि आप क्या कर रहे हैं इसके बारे में थोड़ा और विशिष्ट हो सकते हैं पूरा करने के लिए? –

उत्तर

3

उन्होंने पावरशेल रीमोटिंग विशिष्टता प्रकाशित की है जो आपको विशिष्टता प्रदान करेगी, लेकिन स्रोत कोड जो वे इसे लागू करने के लिए उपयोग करते थे, इस समय सार्वजनिक नहीं है। http://msdn.microsoft.com/en-us/library/dd357801(PROT.10).aspx

1

ओह, मैं देख रहा हूं कि आप क्या पूछ रहे हैं, आप ConvertTo-CliXml की तलाश में हैं जैसे कनवर्टो-सीएसवी निर्यात-सीएसवी के स्थान पर कैसे काम करता है। पहली नज़र में ऐसा लगता है कि आप पूरी तरह से CliXml से बचने की कोशिश कर रहे हैं।

उस मामले में, वहाँ PoshCode पर एक है: ConvertTo-CliXmlConvertFrom-CliXml

यहाँ एक शब्दशः प्रतिलिपि आप जानकारी देने के लिए (मैं शुद्धता के लिए यह जांच न की हो) है:

function ConvertTo-CliXml { 
    param(
     [Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)] 
     [ValidateNotNullOrEmpty()] 
     [PSObject[]]$InputObject 
    ) 
    begin { 
     $type = [PSObject].Assembly.GetType('System.Management.Automation.Serializer') 
     $ctor = $type.GetConstructor('instance,nonpublic', $null, @([System.Xml.XmlWriter]), $null) 
     $sw = New-Object System.IO.StringWriter 
     $xw = New-Object System.Xml.XmlTextWriter $sw 
     $serializer = $ctor.Invoke($xw) 
     $method = $type.GetMethod('Serialize', 'nonpublic,instance', $null, [type[]]@([object]), $null) 
     $done = $type.GetMethod('Done', [System.Reflection.BindingFlags]'nonpublic,instance') 
    } 
    process { 
     try { 
      [void]$method.Invoke($serializer, $InputObject) 
     } catch { 
      Write-Warning "Could not serialize $($InputObject.GetType()): $_" 
     } 
    } 
    end {  
     [void]$done.Invoke($serializer, @()) 
     $sw.ToString() 
     $xw.Close() 
     $sw.Dispose() 
    } 
} 
संबंधित मुद्दे