163 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
<?xml version="1.0" encoding="utf-8"?>
 | 
						|
<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
 | 
						|
	<settings pass="offlineServicing"></settings>
 | 
						|
	<settings pass="windowsPE">
 | 
						|
		<component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
 | 
						|
			<ImageInstall>
 | 
						|
				<OSImage>
 | 
						|
					<Compact>false</Compact>
 | 
						|
				</OSImage>
 | 
						|
			</ImageInstall>
 | 
						|
			<UserData>
 | 
						|
				<ProductKey>
 | 
						|
					<Key>00000-00000-00000-00000-00000</Key>
 | 
						|
					<WillShowUI>OnError</WillShowUI>
 | 
						|
				</ProductKey>
 | 
						|
				<AcceptEula>true</AcceptEula>
 | 
						|
			</UserData>
 | 
						|
			<UseConfigurationSet>false</UseConfigurationSet>
 | 
						|
		</component>
 | 
						|
	</settings>
 | 
						|
	<settings pass="generalize"></settings>
 | 
						|
	<settings pass="specialize">
 | 
						|
		<component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
 | 
						|
			<RunSynchronous>
 | 
						|
				<RunSynchronousCommand wcm:action="add">
 | 
						|
					<Order>1</Order>
 | 
						|
					<Path>powershell.exe -WindowStyle Normal -NoProfile -Command "$xml = [xml]::new(); $xml.Load('C:\Windows\Panther\unattend.xml'); $sb = [scriptblock]::Create( $xml.unattend.Extensions.ExtractScript ); Invoke-Command -ScriptBlock $sb -ArgumentList $xml;"</Path>
 | 
						|
				</RunSynchronousCommand>
 | 
						|
				<RunSynchronousCommand wcm:action="add">
 | 
						|
					<Order>2</Order>
 | 
						|
					<Path>powershell.exe -WindowStyle Normal -NoProfile -Command "Get-Content -LiteralPath 'C:\Windows\Setup\Scripts\Specialize.ps1' -Raw | Invoke-Expression;"</Path>
 | 
						|
				</RunSynchronousCommand>
 | 
						|
			</RunSynchronous>
 | 
						|
		</component>
 | 
						|
	</settings>
 | 
						|
	<settings pass="auditSystem"></settings>
 | 
						|
	<settings pass="auditUser"></settings>
 | 
						|
	<settings pass="oobeSystem">
 | 
						|
		<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
 | 
						|
			<UserAccounts>
 | 
						|
				<LocalAccounts>
 | 
						|
					<LocalAccount wcm:action="add">
 | 
						|
						<Name>sadmin</Name>
 | 
						|
						<DisplayName></DisplayName>
 | 
						|
						<Group>Administrators</Group>
 | 
						|
						<Password>
 | 
						|
							<Value>cABhAHMAcwB3AG8AcgBkAFAAYQBzAHMAdwBvAHIAZAA=</Value>
 | 
						|
							<PlainText>false</PlainText>
 | 
						|
						</Password>
 | 
						|
					</LocalAccount>
 | 
						|
				</LocalAccounts>
 | 
						|
			</UserAccounts>
 | 
						|
			<AutoLogon>
 | 
						|
				<Username>sadmin</Username>
 | 
						|
				<Enabled>true</Enabled>
 | 
						|
				<LogonCount>1</LogonCount>
 | 
						|
				<Password>
 | 
						|
					<Value>cABhAHMAcwB3AG8AcgBkAFAAYQBzAHMAdwBvAHIAZAA=</Value>
 | 
						|
					<PlainText>false</PlainText>
 | 
						|
				</Password>
 | 
						|
			</AutoLogon>
 | 
						|
			<OOBE>
 | 
						|
				<ProtectYourPC>3</ProtectYourPC>
 | 
						|
				<HideEULAPage>true</HideEULAPage>
 | 
						|
				<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
 | 
						|
				<HideOnlineAccountScreens>false</HideOnlineAccountScreens>
 | 
						|
			</OOBE>
 | 
						|
			<FirstLogonCommands>
 | 
						|
				<SynchronousCommand wcm:action="add">
 | 
						|
					<Order>1</Order>
 | 
						|
					<CommandLine>powershell.exe -WindowStyle Normal -NoProfile -Command "Get-Content -LiteralPath 'C:\Windows\Setup\Scripts\FirstLogon.ps1' -Raw | Invoke-Expression;"</CommandLine>
 | 
						|
				</SynchronousCommand>
 | 
						|
			</FirstLogonCommands>
 | 
						|
		</component>
 | 
						|
	</settings>
 | 
						|
	<Extensions xmlns="https://schneegans.de/windows/unattend-generator/">
 | 
						|
		<ExtractScript>
 | 
						|
param(
 | 
						|
    [xml] $Document
 | 
						|
);
 | 
						|
 | 
						|
foreach( $file in $Document.unattend.Extensions.File ) {
 | 
						|
    $path = [System.Environment]::ExpandEnvironmentVariables( $file.GetAttribute( 'path' ) );
 | 
						|
    mkdir -Path( $path | Split-Path -Parent ) -ErrorAction 'SilentlyContinue';
 | 
						|
    $encoding = switch( [System.IO.Path]::GetExtension( $path ) ) {
 | 
						|
        { $_ -in '.ps1', '.xml' } { [System.Text.Encoding]::UTF8; }
 | 
						|
        { $_ -in '.reg', '.vbs', '.js' } { [System.Text.UnicodeEncoding]::new( $false, $true ); }
 | 
						|
        default { [System.Text.Encoding]::Default; }
 | 
						|
    };
 | 
						|
    $bytes = $encoding.GetPreamble() + $encoding.GetBytes( $file.InnerText.Trim() );
 | 
						|
    [System.IO.File]::WriteAllBytes( $path, $bytes );
 | 
						|
}
 | 
						|
		</ExtractScript>
 | 
						|
		<File path="C:\Windows\Setup\Scripts\Specialize.ps1">
 | 
						|
$scripts = @(
 | 
						|
	{
 | 
						|
		net.exe accounts /maxpwage:UNLIMITED;
 | 
						|
	};
 | 
						|
	{
 | 
						|
		reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\BitLocker" /v "PreventDeviceEncryption" /t REG_DWORD /d 1 /f;
 | 
						|
	};
 | 
						|
);
 | 
						|
 | 
						|
& {
 | 
						|
  [float] $complete = 0;
 | 
						|
  [float] $increment = 100 / $scripts.Count;
 | 
						|
  foreach( $script in $scripts ) {
 | 
						|
    Write-Progress -Activity 'Running scripts to customize your Windows installation. Do not close this window.' -PercentComplete $complete;
 | 
						|
    '*** Will now execute command «{0}».' -f $(
 | 
						|
      $str = $script.ToString().Trim() -replace '\s+', ' ';
 | 
						|
      $max = 100;
 | 
						|
      if( $str.Length -le $max ) {
 | 
						|
        $str;
 | 
						|
      } else {
 | 
						|
        $str.Substring( 0, $max - 1 ) + '…';
 | 
						|
      }
 | 
						|
    );
 | 
						|
    $start = [datetime]::Now;
 | 
						|
    & $script;
 | 
						|
    '*** Finished executing command after {0:0} ms.' -f [datetime]::Now.Subtract( $start ).TotalMilliseconds;
 | 
						|
    "`r`n" * 3;
 | 
						|
    $complete += $increment;
 | 
						|
  }
 | 
						|
} *>&1 >> "C:\Windows\Setup\Scripts\Specialize.log";
 | 
						|
		</File>
 | 
						|
		<File path="C:\Windows\Setup\Scripts\FirstLogon.ps1">
 | 
						|
$scripts = @(
 | 
						|
	{
 | 
						|
		Set-ItemProperty -LiteralPath 'Registry::HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' -Name 'AutoLogonCount' -Type 'DWord' -Force -Value 0;
 | 
						|
	};
 | 
						|
	{
 | 
						|
		Remove-Item -LiteralPath @(
 | 
						|
		  'C:\Windows\Panther\unattend.xml';
 | 
						|
		  'C:\Windows\Panther\unattend-original.xml';
 | 
						|
		  'C:\Windows\Setup\Scripts\Wifi.xml';
 | 
						|
		) -Force -ErrorAction 'SilentlyContinue' -Verbose;
 | 
						|
	};
 | 
						|
);
 | 
						|
 | 
						|
& {
 | 
						|
  [float] $complete = 0;
 | 
						|
  [float] $increment = 100 / $scripts.Count;
 | 
						|
  foreach( $script in $scripts ) {
 | 
						|
    Write-Progress -Activity 'Running scripts to finalize your Windows installation. Do not close this window.' -PercentComplete $complete;
 | 
						|
    '*** Will now execute command «{0}».' -f $(
 | 
						|
      $str = $script.ToString().Trim() -replace '\s+', ' ';
 | 
						|
      $max = 100;
 | 
						|
      if( $str.Length -le $max ) {
 | 
						|
        $str;
 | 
						|
      } else {
 | 
						|
        $str.Substring( 0, $max - 1 ) + '…';
 | 
						|
      }
 | 
						|
    );
 | 
						|
    $start = [datetime]::Now;
 | 
						|
    & $script;
 | 
						|
    '*** Finished executing command after {0:0} ms.' -f [datetime]::Now.Subtract( $start ).TotalMilliseconds;
 | 
						|
    "`r`n" * 3;
 | 
						|
    $complete += $increment;
 | 
						|
  }
 | 
						|
} *>&1 >> "C:\Windows\Setup\Scripts\FirstLogon.log";
 | 
						|
		</File>
 | 
						|
	</Extensions>
 | 
						|
</unattend> |