<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright © 2004-2006 Microsoft Cororation. All rights reserved. -->
<xs:schema xmlns="http://schemas.microsoft.com/wbem/wsman/1/windows/shell" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wsman="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd" targetNamespace="http://schemas.microsoft.com/wbem/wsman/1/windows/shell" elementFormDefault="qualified">
	<!-- Shell properties -->
	<xs:complexType name="Shell">
		<xs:sequence>
			<xs:element name="Environment" minOccurs="0">
				<xs:complexType>
					<xs:sequence maxOccurs="unbounded">
						<xs:element name="Variable" type="EnvironmentVariable"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="WorkingDirectory" type="xs:string" nillable="false" minOccurs="0"/>
			<xs:element name="Lifetime" type="xs:duration" minOccurs="0"/>
			<xs:element name="IdleTimeout" type="xs:duration" minOccurs="0"/>
			<xs:element name="InputStreams" type="StreamNameList" minOccurs="0"/>
			<xs:element name="OutputStreams" type="StreamNameList" minOccurs="0"/>
			<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<!-- Sub-properties -->
	<xs:complexType name="EnvironmentVariable">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute name="Name" type="xs:string" use="required"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<!-- Streams -->
	<xs:complexType name="StreamType">
		<xs:simpleContent>
			<xs:extension base="xs:base64Binary">
				<xs:attribute name="Name" type="StreamName" use="required"/>
				<xs:attribute name="SequenceId" type="xs:unsignedLong" use="optional"/>
				<xs:attribute name="CommandId" type="xs:anyURI" use="optional"/>
				<xs:attribute name="End" type="xs:boolean" use="optional"/>
				<xs:attribute name="Unit" type="xs:anyURI" use="optional"/>
				<xs:attribute name="EndUnit" type="xs:boolean" use="optional"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:simpleType name="StreamName">
		<xs:restriction base="xs:token"/>
	</xs:simpleType>
	<xs:simpleType name="StreamNameList">
		<xs:list itemType="StreamName"/>
	</xs:simpleType>
	<!-- Other elements -->
	<xs:simpleType name="CommandStateEnumeration">
		<xs:restriction base="xs:anyURI">
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/CommandState/Done"/>
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/CommandState/Pending"/>
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/CommandState/Running"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="CommandStateType">
		<xs:sequence>
			<xs:element name="ExitCode" minOccurs="0">
				<xs:simpleType>
					<xs:restriction base="xs:integer"/>
				</xs:simpleType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="CommandId" type="xs:anyURI" use="required"/>
		<xs:attribute name="State" type="CommandStateEnumeration" use="required"/>
	</xs:complexType>
	<!-- Custom method messages -->
	<xs:complexType name="CommandLine">
		<xs:sequence>
			<xs:element name="Command" type="xs:string"/>
			<xs:element name="Arguments" minOccurs="0" maxOccurs="unbounded">
				<xs:simpleType>
					<xs:restriction base="xs:string"/>
				</xs:simpleType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="CommandResponse">
		<xs:sequence>
			<xs:element name="CommandId" type="xs:anyURI"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="Signal">
		<xs:sequence>
			<xs:element name="Code" type="SignalCodeEnumeration"/>
		</xs:sequence>
		<xs:attribute name="CommandId" type="xs:anyURI" use="optional"/>
	</xs:complexType>
	<xs:simpleType name="SignalCodeEnumeration">
		<xs:restriction base="xs:anyURI">
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/Signal/Terminate"/>
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/Signal/Break"/>
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/Signal/Pause"/>
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/Signal/Resume"/>
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/Signal/Exit"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="Send">
		<xs:sequence>
			<xs:element name="Stream" type="StreamType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="SendResponse">
		<xs:sequence>
			<xs:element name="DesiredStream" type="StreamType" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="Receive">
		<xs:sequence>
			<xs:element name="DesiredStreams" type="StreamNameList" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ReceiveResponse">
		<xs:sequence>
			<xs:element name="Stream" type="StreamType" minOccurs="0" maxOccurs="unbounded"/>
			<!-- maxOccurs="1" is OK since multiple simultaneous completions are rare -->
			<xs:element name="CommandState" type="CommandStateType" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="SequenceID" type="xs:unsignedLong" use="optional"/>
	</xs:complexType>
	<xs:simpleType name="restrictedFaultDetailType">
		<xs:restriction base="xs:anyURI">
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/faultDetail/InvalidWorkingDirectory"/>
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/faultDetail/InvalidEnvironmentVariable"/>
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/faultDetail/InvalidStream"/>
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/faultDetail/InvalidIdleTimeout"/>
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/faultDetail/InvalidLifetime"/>
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/faultDetail/InvalidExtension"/>
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/faultDetail/MaxMemoryPerShell"/>
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/faultDetail/MaxProcessesPerShell"/>
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/faultDetail/MaxConcurrentUsers"/>
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/faultDetail/MaxShellsPerUser"/>
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/faultDetail/MaxShellTimeout"/>
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/faultDetail/InvalidCommand"/>
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/faultDetail/Buffer"/>
			<xs:enumeration value="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/faultDetail/StreamEncoding"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="FaultDetailType">
		<xs:union memberTypes="restrictedFaultDetailType xs:anyURI"/>
	</xs:simpleType>
	<xs:element name="FaultDetail" type="FaultDetailType"/>
	<!--  Master Fault Table subcode QNames -->
	<xs:element name="CommandFault">
		<xs:complexType/>
	</xs:element>
	<xs:element name="SendFault">
		<xs:complexType/>
	</xs:element>
	<xs:element name="ReceiveFault">
		<xs:complexType/>
	</xs:element>
	<xs:element name="SignalFault">
		<xs:complexType/>
	</xs:element>
</xs:schema>
