示例#1
0
    def __init__(self,
                 names=None,
                 command_type=None,
                 namespace=None,
                 argument_list=None):
        """
        [MS-PSRP] 2.2.2.14 GET_COMMAND_METADATA Message
        https://msdn.microsoft.com/en-us/library/ee175985.aspx

        :param names:
        :param command_type:
        :param namespace:
        :param argument_list:
        """
        super(GetCommandMetadata, self).__init__()
        self._extended_properties = (('names',
                                      ListMeta(name="Name",
                                               list_value_meta=ObjectMeta("S"),
                                               list_types=[
                                                   "System.String[]",
                                                   "System.Array",
                                                   "System.Object"
                                               ])),
                                     ('command_type',
                                      ObjectMeta(name="CommandType",
                                                 object=CommandType)),
                                     ('namespace',
                                      ObjectMeta(name="Namespace")),
                                     ('argument_list',
                                      ListMeta(name="ArgumentList")))
        self.names = names
        self.command_type = command_type
        self.namespace = namespace
        self.argument_list = argument_list
示例#2
0
    def __init__(self,
                 protocol_version=None,
                 ps_version=None,
                 serialization_version=None,
                 time_zone=None):
        """
        [MS-PSRP] 2.2.2.1 SESSION_CAPABILITY Message
        https://msdn.microsoft.com/en-us/library/dd340636.aspx

        :param protocol_version: The PSRP version
        :param ps_version: The PowerShell version
        :param serialization_version: The serialization version
        :param time_zone: Time Zone information of the host, should be a byte
            string
        """
        super(SessionCapability, self).__init__()
        self._extended_properties = (
            ('protocol_version', ObjectMeta("Version",
                                            name="protocolversion")),
            ('ps_version', ObjectMeta("Version", name="PSVersion")),
            ('serialization_version',
             ObjectMeta("Version", name="SerializationVersion")),
            ('time_zone', ObjectMeta("BA", name="TimeZone", optional=True)),
        )
        self.protocol_version = protocol_version
        self.ps_version = ps_version
        self.serialization_version = serialization_version
        self.time_zone = time_zone
示例#3
0
    def __init__(self,
                 activity=None,
                 activity_id=None,
                 description=None,
                 current_operation=None,
                 parent_activity_id=None,
                 percent_complete=None,
                 progress_type=None,
                 seconds_remaining=None):
        """
        [MS-PSRP] 2.2.2.25 PROGRESS_RECORD Message
        https://msdn.microsoft.com/en-us/library/dd340751.aspx

        :param kwargs:
        """
        super(ProgressRecord, self).__init__()
        self._extended_properties = (
            ('activity', ObjectMeta("S", name="Activity")),
            ('activity_id', ObjectMeta("I32", name="ActivityId")),
            ('description', ObjectMeta("S", name="StatusDescription")),
            ('current_operation', ObjectMeta("S", name="CurrentOperation")),
            ('parent_activity_id', ObjectMeta("I32", name="ParentActivityId")),
            ('percent_complete', ObjectMeta("I32", name="PercentComplete")),
            ('progress_type',
             ObjectMeta("Obj", name="Type", object=ProgressRecordType)),
            ('seconds_remaining', ObjectMeta("I32", name="SecondsRemaining")),
        )
        self.activity = activity
        self.activity_id = activity_id
        self.description = description
        self.current_operation = current_operation
        self.parent_activity_id = parent_activity_id
        self.percent_complete = percent_complete
        self.progress_type = progress_type
        self.seconds_remaining = seconds_remaining
示例#4
0
    def __init__(
        self,
        min_runspaces: typing.Optional[int] = None,
        max_runspaces: typing.Optional[int] = None,
        thread_options: typing.Optional[PSThreadOptions] = None,
        apartment_state: typing.Optional[ApartmentState] = None,
        host_info: typing.Optional[HostInfo] = None,
        application_arguments: typing.Optional[typing.Dict] = None,
    ) -> None:
        """
        [MS-PSRP] 2.2.2.2 INIT_RUNSPACEPOOL Message
        https://msdn.microsoft.com/en-us/library/dd359645.aspx

        :param min_runspaces: The minimum number of runspaces in the pool
        :param max_runspaces: The maximum number of runspaces in the pool
        :param thread_options: Thread options provided by the higher layer
        :param apartment_state: Apartment state provided by the higher layer
        :param host_info: The client's HostInfo details
        :param application_arguments: Application arguments provided by a
            higher layer, stored in the $PSSenderInfo variable in the pool
        """
        super(InitRunspacePool, self).__init__()
        self._extended_properties = (
            ("min_runspaces", ObjectMeta("I32", name="MinRunspaces")),
            ("max_runspaces", ObjectMeta("I32", name="MaxRunspaces")),
            ("thread_options",
             ObjectMeta("Obj", name="PSThreadOptions",
                        object=PSThreadOptions)),
            ("apartment_state",
             ObjectMeta("Obj", name="ApartmentState", object=ApartmentState)),
            ("host_info", ObjectMeta("Obj", name="HostInfo", object=HostInfo)),
            (
                "application_arguments",
                DictionaryMeta(
                    name="ApplicationArguments",
                    dict_types=[
                        "System.Management.Automation.PSPrimitiveDictionary",
                        "System.Collections.Hashtable",
                        "System.Object",
                    ],
                ),
            ),
        )
        self.min_runspaces = min_runspaces
        self.max_runspaces = max_runspaces
        self.thread_options = thread_options
        self.apartment_state = apartment_state
        self.host_info = host_info
        self.application_arguments = application_arguments
示例#5
0
    def __init__(self, min_runspaces=None, ci=None):
        """
        [MS-PSRP] 2.2.2.7 SET_MIN_RUNSPACES Message
        https://msdn.microsoft.com/en-us/library/dd340570.aspx

        :param max_runspaces: The minimum number of runspaces
        :param ci: The ci identifier for the CI table
        """
        super(SetMinRunspaces, self).__init__()
        self._extended_properties = (
            ('min_runspaces', ObjectMeta("I32", name="MinRunspaces")),
            ('ci', ObjectMeta("I64", name="CI")),
        )
        self.min_runspaces = min_runspaces
        self.ci = ci
示例#6
0
    def __init__(self, response=None, ci=None):
        """
        [MS-PSRP] 2.2.2.8 RUNSPACE_AVAILABILITY Message
        https://msdn.microsoft.com/en-us/library/dd359229.aspx

        :param response: The response from the server
        :param ci: The ci identifier for the CI table
        """
        super(RunspaceAvailability, self).__init__()
        self._extended_properties = (
            ('response', ObjectMeta(name="SetMinMaxRunspacesResponse")),
            ('ci', ObjectMeta("I64", name="ci")),
        )
        self.response = response
        self.ci = ci
示例#7
0
    def __init__(self, min_runspaces=None, max_runspaces=None):
        """
        [MS-PSRP] 2.2.2.30 RUNSPACEPOOL_INIT_DATA Message
        https://msdn.microsoft.com/en-us/library/hh537788.aspx

        :param min_runspaces:
        :param max_runspaces:
        """
        super(RunspacePoolInitData, self).__init__()
        self._extended_properties = (
            ('min_runspaces', ObjectMeta("I32", name="MinRunspaces")),
            ('max_runspaces', ObjectMeta("I32", name="MaxRunspaces")),
        )
        self.min_runspaces = min_runspaces
        self.max_runspaces = max_runspaces
示例#8
0
    def __init__(
        self,
        message_data=None,
        source=None,
        time_generated=None,
        tags=None,
        user=None,
        computer=None,
        pid=None,
        native_thread_id=None,
        managed_thread_id=None,
        write_information_stream=None,
    ):
        """
        [MS-PSRP] 2.2.2.26 INFORMATION_RECORD Message
        https://msdn.microsoft.com/en-us/library/mt224023.aspx

        Only in protocol_version 2.3 and above

        :param kwargs:
        """
        super(InformationRecord, self).__init__()
        self._types = [
            "System.Management.Automation.InformationRecord", "System.Object"
        ]
        self._extended_properties = (
            ("message_data", ObjectMeta(name="MessageData")),
            ("source", ObjectMeta("S", name="Source")),
            ("time_generated", ObjectMeta("DT", name="TimeGenerated")),
            ("tags", ListMeta(name="Tags", list_value_meta=ObjectMeta("S"))),
            ("user", ObjectMeta("S", name="User")),
            ("computer", ObjectMeta("S", name="Computer")),
            ("pid", ObjectMeta("U32", name="ProcessId")),
            ("native_thread_id", ObjectMeta("U32", name="NativeThreadId")),
            ("managed_thread_id", ObjectMeta("U32", name="ManagedThreadId")),
            ("write_information_stream",
             ObjectMeta("B", name="WriteInformationStream", optional=True)),
        )
        self.message_data = message_data
        self.source = source
        self.time_generated = time_generated
        self.tags = tags
        self.user = user
        self.computer = computer
        self.pid = pid
        self.native_thread_id = native_thread_id
        self.managed_thread_id = managed_thread_id
        self.write_information_stream = write_information_stream
示例#9
0
 def __init__(self, **kwargs):
     super(SerialObject, self).__init__()
     self._types = ["System.Test", "System.Object"]
     self._extended_properties = (('man_prop',
                                   ObjectMeta("S",
                                              optional=False)), )
     self.man_prop = kwargs.get('man_prop')
示例#10
0
    def _deserialize_dynamic_obj(
        self,
        element: ET.Element,
        metadata: ObjectMeta,
    ) -> typing.Any:
        obj = metadata.object(
        )  # type: ignore[misc] # Caller always sets object
        self.obj[element.attrib["RefId"]] = obj

        for obj_property in element:
            if obj_property.tag == "TN":
                for obj_type in obj_property:
                    obj.types.append(obj_type.text)
                self.tn[obj_property.attrib["RefId"]] = obj.types
            elif obj_property.tag == "TNRef":
                obj.types = self.tn[obj_property.attrib["RefId"]]
            elif obj_property.tag == "Props":
                for adapted_property in obj_property:
                    key = adapted_property.attrib["N"]
                    value = self.deserialize(adapted_property, clear=False)
                    obj.adapted_properties[key] = value
            elif obj_property.tag == "MS":
                for extended_property in obj_property:
                    key = extended_property.attrib["N"]
                    value = self.deserialize(extended_property, clear=False)
                    obj.extended_properties[key] = value
            elif obj_property.tag == "ToString":
                value = self.deserialize(obj_property, clear=False)
                obj.to_string = value
            else:
                value = self.deserialize(obj_property, clear=False)
                obj.property_sets.append(value)

        return obj
示例#11
0
    def __init__(self, state=None, error_record=None):
        """
        [MS-PSRP] 2.2.2.9 RUNSPACEPOOL_STATE Message
        https://msdn.microsoft.com/en-us/library/dd303020.aspx

        :param state: The state of the runspace pool
        :param error_record:
        """
        super(RunspacePoolStateMessage, self).__init__()
        self._extended_properties = (
            ('state', ObjectMeta("I32", name="RunspaceState")),
            ('error_record',
             ObjectMeta("Obj", optional=True, object=ErrorRecord)),
        )
        self.state = state
        self.error_record = error_record
示例#12
0
    def test_psrp(self, functional_transports):
        for wsman in functional_transports:
            with RunspacePool(wsman) as pool:
                pool.exchange_keys()
                ps = PowerShell(pool)
                ps.add_cmdlet("Get-Item").add_parameter("Path", "C:\\Windows")
                ps.add_statement()

                sec_string = pool.serialize(u"super secret", ObjectMeta("SS"))
                ps.add_cmdlet("Set-Variable")
                ps.add_parameter("Name", "password")
                ps.add_parameter("Value", sec_string)

                ps.add_statement().add_script(
                    "[System.Runtime.InteropServices.marshal]"
                    "::PtrToStringAuto([System.Runtime.InteropServices.marshal]"
                    "::SecureStringToBSTR($password))")
                ps.add_statement().add_cmdlet("ConvertTo-SecureString")
                ps.add_parameter("String", "host secret")
                ps.add_parameter("AsPlainText")
                ps.add_parameter("Force")

                large_string = "hello world " * 3000
                ps.add_statement()
                ps.add_script("$VerbosePreference = 'Continue'; "
                              "Write-Verbose '%s'" % large_string)

                actual = ps.invoke()

            assert ps.had_errors is False
            assert len(actual) == 3
            assert str(actual[0]) == "C:\\Windows"
            assert actual[1] == u"super secret"
            assert actual[2] == u"host secret"
            assert str(ps.streams.verbose[0]) == large_string
示例#13
0
 def test_parse_message(self):
     xml = """<Obj RefId="11">
         <MS>
             <S N="mr">Line read from the host</S>
             <I64 N="ci">1</I64>
             <Obj N="mi" RefId="12">
                 <TN RefId="4">
                     <T>System.Management.Automation.Remoting.RemoteHostMethodId</T>
                     <T>System.Enum</T>
                     <T>System.ValueType</T>
                     <T>System.Object</T>
                 </TN>
                 <ToString>ReadLine</ToString>
                 <I32>11</I32>
             </Obj>
         </MS>
     </Obj>"""
     serializer = Serializer()
     meta = ObjectMeta("Obj", object=RunspacePoolHostResponse)
     actual = serializer.deserialize(xml, meta)
     assert actual.ci == 1
     assert actual.me is None
     assert str(actual.mi) == "ReadLine"
     assert isinstance(actual.mi, HostMethodIdentifier)
     assert actual.mi.value == 11
     assert actual.mr == "Line read from the host"
示例#14
0
    def __init__(self, state=None, error_record=None):
        """
        [MS-PSRP] 2.2.2.21 PIPELINE_STATE Message
        https://msdn.microsoft.com/en-us/library/dd304923.aspx

        :param state: The state of the pipeline
        :param error_record:
        """
        super(PipelineState, self).__init__()
        self._extended_properties = (
            ('state', ObjectMeta("I32", name="PipelineState")),
            ('error_record',
             ObjectMeta("Obj", name="ExceptionAsErrorRecord", optional=True)),
        )
        self.state = state
        self.error_record = error_record
示例#15
0
 def test_parse_message(self):
     xml = """<Obj RefId="0">
         <MS>
             <I64 N="ci">1</I64>
             <Obj N="mi" RefId="1">
                 <TN RefId="0">
                     <T>System.Management.Automation.Remoting.RemoteHostMethodId</T>
                     <T>System.Enum</T>
                     <T>System.ValueType</T>
                     <T>System.Object</T>
                 </TN>
                 <ToString>ReadLine</ToString>
                 <I32>11</I32>
             </Obj>
             <Obj N="mp" RefId="2">
                 <TN RefId="1">
                     <T>System.Collections.ArrayList</T>
                     <T>System.Object</T>
                 </TN>
                 <LST/>
             </Obj>
         </MS>
     </Obj>"""
     serializer = Serializer()
     meta = ObjectMeta("Obj", object=RunspacePoolHostCall)
     actual = serializer.deserialize(xml, meta)
     assert actual.ci == 1
     assert str(actual.mi) == "ReadLine"
     assert isinstance(actual.mi, HostMethodIdentifier)
     assert actual.mi.value == 11
     assert actual.mp == []
示例#16
0
 def test_parse_array(self):
     serializer = Serializer()
     actual = serializer.deserialize(self.SINGLE_ARRAY,
                                     ObjectMeta("Obj", object=Array))
     array = actual.array
     assert array == [1, 2, 3]
     assert actual.mae == [1, 2, 3]
     assert actual.mal == [3]
示例#17
0
 def test_parse_two_dimensional_array(self):
     serializer = Serializer()
     actual = serializer.deserialize(self.TWO_ARRAY,
                                     ObjectMeta("Obj", object=Array))
     array = actual.array
     assert array == [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
     assert actual.mae == [1, 2, 3, 4, 5, 6, 7, 8, 9]
     assert actual.mal == [3, 3]
示例#18
0
    def __init__(self, min_runspaces=None, max_runspaces=None):
        """
        [MS-PSRP] 2.2.2.29 CONNECT_RUNSPACEPOOL Message
        https://msdn.microsoft.com/en-us/library/hh537460.aspx

        :param min_runspaces:
        :param max_runspaces:
        """
        super(ConnectRunspacePool, self).__init__()
        self._extended_properties = (
            ('min_runspaces',
             ObjectMeta("I32", name="MinRunspaces", optional=True)),
            ('max_runspaces',
             ObjectMeta("I32", name="MaxRunspaces", optional=True)),
        )
        self.min_runspaces = min_runspaces
        self.max_runspaces = max_runspaces
示例#19
0
    def test_parse_buffer_cell(self):
        serializer = Serializer()
        actual = serializer.deserialize(normalise_xml(self.BUFFER_CELL),
                                        ObjectMeta("Obj", object=BufferCell))

        assert actual.character == "A"
        assert actual.foreground_color.value == Color.CYAN
        assert actual.background_color.value == Color.GREEN
        assert actual.cell_type == BufferCellType.COMPLETE
示例#20
0
    def __init__(self, ci=None, mi=None, mp=None):
        """
        [MS-PSRP] 2.2.2.15 RUNSPACE_HOST_CALL Message
        https://msdn.microsoft.com/en-us/library/dd340830.aspx

        :param ci:
        :param mi:
        :param mp:
        """
        super(RunspacePoolHostCall, self).__init__()
        self._extended_properties = (
            ('ci', ObjectMeta("I64", name="ci")),
            ('mi', ObjectMeta("Obj", name="mi", object=HostMethodIdentifier)),
            ('mp', ListMeta(name="mp"))
        )
        self.ci = ci
        self.mi = mi
        self.mp = mp
示例#21
0
    def __init__(
        self,
        max_runspaces: typing.Optional[int] = None,
        ci: typing.Optional[int] = None,
    ) -> None:
        """
        [MS-PSRP] 2.2.2.6 SET_MAX_RUNSPACES Message
        https://msdn.microsoft.com/en-us/library/dd304870.aspx

        :param max_runspaces: The maximum number of runspaces
        :param ci: The ci identifier for the CI table
        """
        super(SetMaxRunspaces, self).__init__()
        self._extended_properties = (
            ("max_runspaces", ObjectMeta("I32", name="MaxRunspaces")),
            ("ci", ObjectMeta("I64", name="CI")),
        )
        self.max_runspaces = max_runspaces
        self.ci = ci
示例#22
0
    def __init__(self, ci=None):
        """
        [MS-PSRP] 2.2.2.11 GET_AVAILABLE_RUNSPACES Message
        https://msdn.microsoft.com/en-us/library/dd357512.aspx

        :param ci: The ci identifier for the CI table
        """
        super(GetAvailableRunspaces, self).__init__()
        self._extended_properties = (('ci', ObjectMeta("I64", name="ci")), )
        self.ci = ci
示例#23
0
    def __init__(self, ci=None):
        """
        [MS-PSRP] 2.2.2.31 RESET_RUNSPACE_STATE Message
        https://msdn.microsoft.com/en-us/library/mt224027.aspx

        :param ci: The call identifier
        """
        super(ResetRunspaceState, self).__init__()
        self._extended_properties = (('ci', ObjectMeta("I64", name="ci")), )
        self.ci = ci
示例#24
0
 def test_parse_three_dimensional_array(self):
     serializer = Serializer()
     actual = serializer.deserialize(self.THREE_ARRAY,
                                     ObjectMeta("Obj", object=Array))
     array = actual.array
     assert array == [
         [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]],
         [[13, 14, 15, 16], [17, 18, 19, 20], [21, 22, 23, 24]]
     ]
     assert actual.mae == [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
                           13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
     assert actual.mal == [2, 3, 4]
示例#25
0
    def _create_obj(self, parent, obj, key=None, meta=None):
        if isinstance(obj, ComplexObject):
            for ref, value in self.obj.items():
                if value == obj:
                    sub_element = ET.SubElement(parent, "Ref", RefId=ref)
                    if key is not None:
                        sub_element.attrib["N"] = key
                    return

        if meta is None:
            meta = ObjectMeta(name=key)
        self.serialize(obj, metadata=meta, parent=parent, clear=False)
示例#26
0
    def __init__(self, public_key=None):
        """
        [MS-PSRP] 2.2.2.3 PUBLIC_KEY Message
        https://msdn.microsoft.com/en-us/library/dd644859.aspx

        :param public_key: The Base64 encoding of the public key in the PKCS1
            format.
        """
        super(PublicKey, self).__init__()
        self._extended_properties = (('public_key',
                                      ObjectMeta("S", name="PublicKey")), )
        self.public_key = public_key
示例#27
0
文件: host.py 项目: trir262/pypsrp
    def GetVersion(self, runspace, pipeline):
        """
        MI: 2
        SHOULD return the version number of the hosting application.
        https://docs.microsoft.com/en-us/dotnet/api/system.management.automation.host.pshost.version

        :param runspace: The runspace the host call relates to
        :param pipeline: The pipeline (if any) that the call relates to
        :return: Version number of the hosting application
        """
        meta = ObjectMeta("Version")
        value = runspace.serialize(self.version, meta)
        return value
示例#28
0
    def __init__(self, ci=None, mi=None, mr=None, me=None):
        """
        [MS-PSRP] 2.2.2.16 RUNSPACEPOOL_HOST_RESPONSE Message
        https://msdn.microsoft.com/en-us/library/dd358453.aspx

        :param ci:
        :param mi:
        :param mr:
        :param me:
        """
        super(RunspacePoolHostResponse, self).__init__()
        self._extended_properties = (
            ('ci', ObjectMeta("I64", name="ci")),
            ('mi', ObjectMeta("Obj", name="mi", object=HostMethodIdentifier)),
            ('mr', ObjectMeta(name="mr")),
            ('me',
             ObjectMeta("Obj", name="me", object=ErrorRecord, optional=True)),
        )
        self.ci = ci
        self.mi = mi
        self.mr = mr
        self.me = me
示例#29
0
    def __init__(self, session_key=None):
        """
        [MS-PSRP] 2.2.2.4 ENCRYPTED_SESSION_KEY Message
        https://msdn.microsoft.com/en-us/library/dd644930.aspx

        :param session_key: The 256-bit key for AES encryption that has been
            encrypted using the public key from the PUBLIC_KEY message using
            the RSAES-PKCS-v1_5 encryption scheme and then Base64 formatted.
        """
        super(EncryptedSessionKey, self).__init__()
        self._extended_properties = (('session_key',
                                      ObjectMeta(
                                          "S", name="EncryptedSessionKey")), )
        self.session_key = session_key
示例#30
0
    def __init__(
        self,
        names: typing.Optional[typing.List[str]] = None,
        command_type: typing.Optional[int] = None,
        namespace: typing.Optional[typing.List[str]] = None,
        argument_list: typing.Optional[typing.List] = None,
    ) -> None:
        """
        [MS-PSRP] 2.2.2.14 GET_COMMAND_METADATA Message
        https://msdn.microsoft.com/en-us/library/ee175985.aspx

        :param names:
        :param command_type:
        :param namespace:
        :param argument_list:
        """
        super(GetCommandMetadata, self).__init__()
        self._extended_properties = (
            (
                "names",
                ListMeta(
                    name="Name",
                    list_value_meta=ObjectMeta("S"),
                    list_types=[
                        "System.String[]", "System.Array", "System.Object"
                    ],
                ),
            ),
            ("command_type", ObjectMeta(name="CommandType",
                                        object=CommandType)),
            ("namespace", ObjectMeta(name="Namespace")),
            ("argument_list", ListMeta(name="ArgumentList")),
        )
        self.names = names
        self.command_type = command_type
        self.namespace = namespace
        self.argument_list = argument_list