WindowsServer 部署企业内部MDT服务实现快速装机 (Rules) #### Rulues ``` [Settings] Priority=Default Properties=MyCustomProperty [Default] ;自定义部署过程中显示的组织名称 _SMSTSORGNAME=remind-itops.cn ;自定义部署过程中显示的任务名称 _SMSTSpackageName="系统部署中" ;是否允许部署操作系统到目标计算机 OSInstall=YES ;是否跳过镜像捕获 SkipCapture=YES ;是否跳过选择部署类型 SkipDeploymentType=YES ;配置部署系统的类型 DeploymentType=NEWCOMPUTER ;基于序列号去定义计算机名称 ;OSDComputerName=WorkSation-%SerialNumber% ;是否跳过设置本地管理员密码 SkipAdminPassword=YES ;是否跳过应用程序安装向导页 SkipAppsOnUpgrade=NO ;是否跳过设置计算机名 SkipComputerName=YES ;是否跳过输入产品密钥 SkipProductKey=YES ;设置指定产品秘钥 ;ProductKey= 是否跳过加域或工作组。 SkipDomainMembership=NO ;加入域 ;JoinDomain=remind-itops.cn ;加域时所用的管理员密码, ;DomainAdmin=remind-itops\administrator ;配置加域账户的密码 ;DomainAdminPassword=Aa123321.. ;指定加域的计算机存放的OU ;MachineObjectOU= ;加入工作组 ;JoinWorkgroup=WORKGROUP ;是否跳过计算机备份 SkipComputerBackup=YES ;是否跳过BitLocker配置 SkipBitLocker=YES ;是否跳过任务序列 SKipTaskSequence=NO ;是否跳过系统部署完成后的最后总结 SkipFinalSummary=YES ;是否跳过时区和语言设置 SkipTimeZone=YES ;时区配置 TimeZoneName=China Standard Time ;键盘区域 KeyboardLocale=zh-cn ;用户区域 UserLocale=zh-cn ;语言 UILanguage=zh-cn ;是否跳过本地选择 SkipLocaleSelection=YES ;是否跳过用户数据配置 SkipUserData=YES ;是否跳过配置摘要确认 SkipSummary=YES ;可指定部署日志存放位置,以方便日常排错 SLShare=\\MDT-SERVER\Logs$ ; 按客户端计算机名创建子目录存储日志 SLShareDynamicLogging=%ComputerName% ;可指定部署过程中通过WSUS服务器更新系统补丁 ;WSUSServer= ;是否应用MDT中GPO包 ;ApplyGPOPack=NO ``` #### Boot ``` [Default] DeployRoot=\\MDT\DeploymentShare$ UserDomain=workgroup UserID=administrator UserPassword=Aa123321.. SkipBDDWelcome=YES KeyBoardLocale=en-us ``` #### 执行脚本配置 ``` %SYSTEMROOT%\System32\WindowsPowerShell\v1.0\powershell.exe -STA -NoProfile -ExecutionPolicy Bypass -File "%SCRIPTROOT%\Custom\ChoosePart\test5.ps1" ``` #### 选分区 ``` # MDT Partition Selector - 使用默认变量版 # 功能:选择目标分区后,自动设置MDT默认的OSDDiskIndex和OSDPartitionIndex变量 # 加载所需组件 Add-Type -AssemblyName PresentationFramework Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing # 创建WPF窗口 $window = New-Object System.Windows.Window $window.Title = "选择系统安装分区" $window.Width = 750 $window.Height = 500 $window.WindowStartupLocation = "CenterScreen" $window.ResizeMode = "NoResize" $window.Topmost = $true # 创建主网格 $mainGrid = New-Object System.Windows.Controls.Grid $mainGrid.RowDefinitions.Add((New-Object System.Windows.Controls.RowDefinition -Property @{ Height = [System.Windows.GridLength]::Auto })) $mainGrid.RowDefinitions.Add((New-Object System.Windows.Controls.RowDefinition -Property @{ Height = [System.Windows.GridLength]"*" })) $mainGrid.RowDefinitions.Add((New-Object System.Windows.Controls.RowDefinition -Property @{ Height = [System.Windows.GridLength]::Auto })) $window.Content = $mainGrid # 添加标题(明确关联磁盘和分区编号) $titleLabel = New-Object System.Windows.Controls.Label $titleLabel.Content = "请选择安装操作系统的分区(将使用 磁盘编号:分区编号 关联MDT默认变量):" $titleLabel.FontSize = 14 $titleLabel.Margin = "20,20,20,10" $titleLabel.TextWrapping = "Wrap" [System.Windows.Controls.Grid]::SetRow($titleLabel, 0) $mainGrid.Children.Add($titleLabel) # 创建分区数据表格 $dataGrid = New-Object System.Windows.Controls.DataGrid $dataGrid.SelectionMode = "Single" $dataGrid.SelectionUnit = "FullRow" $dataGrid.AutoGenerateColumns = $false $dataGrid.CanUserAddRows = $false $dataGrid.CanUserDeleteRows = $false $dataGrid.IsReadOnly = $true $dataGrid.HorizontalAlignment = "Stretch" $dataGrid.VerticalAlignment = "Stretch" $dataGrid.Margin = "20,0,20,10" [System.Windows.Controls.Grid]::SetRow($dataGrid, 1) $mainGrid.Children.Add($dataGrid) # 定义数据表格列(强化磁盘和分区编号显示) $columnDiskNumber = New-Object System.Windows.Controls.DataGridTextColumn $columnDiskNumber.Header = "磁盘编号(OSDDiskIndex)" # 明确对应MDT默认变量 $columnDiskNumber.Binding = New-Object System.Windows.Data.Binding("DiskNumber") $columnDiskNumber.Width = 160 $dataGrid.Columns.Add($columnDiskNumber) $columnPartitionNumber = New-Object System.Windows.Controls.DataGridTextColumn $columnPartitionNumber.Header = "分区编号(OSDPartitionIndex)" # 明确对应MDT默认变量 $columnPartitionNumber.Binding = New-Object System.Windows.Data.Binding("PartitionNumber") $columnPartitionNumber.Width = 180 $dataGrid.Columns.Add($columnPartitionNumber) $columnDriveLetter = New-Object System.Windows.Controls.DataGridTextColumn $columnDriveLetter.Header = "驱动器号" $columnDriveLetter.Binding = New-Object System.Windows.Data.Binding("DriveLetter") $columnDriveLetter.Width = 100 $dataGrid.Columns.Add($columnDriveLetter) $columnSize = New-Object System.Windows.Controls.DataGridTextColumn $columnSize.Header = "容量 (GB)" $columnSize.Binding = New-Object System.Windows.Data.Binding("SizeGB") $columnSize.Width = 100 $dataGrid.Columns.Add($columnSize) $columnFileSystem = New-Object System.Windows.Controls.DataGridTextColumn $columnFileSystem.Header = "文件系统" $columnFileSystem.Binding = New-Object System.Windows.Data.Binding("FileSystem") $columnFileSystem.Width = 100 $dataGrid.Columns.Add($columnFileSystem) $columnLabel = New-Object System.Windows.Controls.DataGridTextColumn $columnLabel.Header = "卷标" $columnLabel.Binding = New-Object System.Windows.Data.Binding("Label") $columnLabel.Width = 140 $dataGrid.Columns.Add($columnLabel) # 函数:通过WMI获取分区信息(保留磁盘和分区编号) function Get-PartitionsWMI { try { Write-Host "尝试通过WMI获取分区信息..." $partitions = @() $disks = Get-WmiObject -Class Win32_DiskDrive -ErrorAction Stop foreach ($disk in $disks) { $diskNumber = $disk.Index # 磁盘编号(整数,对应OSDDiskIndex) $partitionsOnDisk = Get-WmiObject -Class Win32_DiskPartition -Filter "DiskIndex=$diskNumber" -ErrorAction Stop foreach ($partition in $partitionsOnDisk) { $partitionNumber = $partition.Index # 分区编号(整数,对应OSDPartitionIndex) $logicalDisks = Get-WmiObject -Class Win32_LogicalDiskToPartition -Filter "Antecedent=`"$($partition.__Path.replace('\', '\\'))`"" -ErrorAction SilentlyContinue foreach ($logicalDisk in $logicalDisks) { $drive = Get-WmiObject -Class Win32_LogicalDisk -Filter "DeviceID='$($logicalDisk.Dependent.Split('=')[1].Replace('"', ''))'" -ErrorAction SilentlyContinue if ($drive) { $partitionInfo = [PSCustomObject]@{ DiskNumber = $diskNumber # 磁盘编号(整数) PartitionNumber = $partitionNumber # 分区编号(整数) DriveLetter = $drive.DeviceID SizeGB = [math]::Round($drive.Size / 1GB, 2) FileSystem = $drive.FileSystem Label = $drive.VolumeName } $partitions += $partitionInfo } } } } if ($partitions.Count -gt 0) { Write-Host "通过WMI获取到 $($partitions.Count) 个分区" return $partitions } else { Write-Host "WMI未检测到分区" return $null } } catch { Write-Host "WMI获取分区失败: $_" return $null } } # 函数:通过CIM获取分区信息(现代方法) function Get-PartitionsCIM { try { Write-Host "尝试通过CIM获取分区信息..." $partitions = @() if (Get-Module -ListAvailable -Name Storage) { Write-Host "使用Storage模块获取分区..." $disks = Get-Disk -ErrorAction Stop foreach ($disk in $disks) { $diskNumber = $disk.Number # 磁盘编号(整数) $partitionsOnDisk = $disk | Get-Partition -ErrorAction SilentlyContinue foreach ($partition in $partitionsOnDisk) { if ($partition.DriveLetter) { # 只显示有驱动器号的分区(可安装系统) $volume = $partition | Get-Volume -ErrorAction SilentlyContinue $partitionInfo = [PSCustomObject]@{ DiskNumber = $diskNumber # 磁盘编号 PartitionNumber = $partition.PartitionNumber # 分区编号 DriveLetter = "$($partition.DriveLetter):" SizeGB = [math]::Round($partition.Size / 1GB, 2) FileSystem = if ($volume) { $volume.FileSystem } else { "未知" } Label = if ($volume) { $volume.FileSystemLabel } else { "" } } $partitions += $partitionInfo } } } } else { Write-Host "Storage模块不可用,使用基础CIM..." $disks = Get-CimInstance -ClassName Win32_DiskDrive -ErrorAction Stop foreach ($disk in $disks) { $diskNumber = $disk.Index $partitionsOnDisk = Get-CimInstance -ClassName Win32_DiskPartition -Filter "DiskIndex=$diskNumber" -ErrorAction Stop foreach ($partition in $partitionsOnDisk) { $partitionNumber = $partition.Index $logicalDisks = Get-CimAssociatedInstance -InputObject $partition -ResultClassName Win32_LogicalDisk -ErrorAction SilentlyContinue foreach ($logicalDisk in $logicalDisks) { $partitionInfo = [PSCustomObject]@{ DiskNumber = $diskNumber PartitionNumber = $partitionNumber DriveLetter = $logicalDisk.DeviceID SizeGB = [math]::Round($logicalDisk.Size / 1GB, 2) FileSystem = $logicalDisk.FileSystem Label = $logicalDisk.VolumeName } $partitions += $partitionInfo } } } } if ($partitions.Count -gt 0) { Write-Host "通过CIM获取到 $($partitions.Count) 个分区" return $partitions } else { Write-Host "CIM未检测到分区" return $null } } catch { Write-Host "CIM获取分区失败: $_" return $null } } # 函数:通过Diskpart获取分区信息(备用方案) function Get-PartitionsDiskPart { try { Write-Host "尝试通过Diskpart获取分区信息..." $scriptPath = "$env:TEMP\diskpart_script.txt" "list disk`nlist partition" | Out-File -FilePath $scriptPath -Encoding ASCII $diskpartOutput = diskpart /s $scriptPath Remove-Item -Path $scriptPath -ErrorAction SilentlyContinue $partitions = @() $currentDisk = -1 $inPartitionList = $false foreach ($line in $diskpartOutput) { # 识别当前磁盘编号 if ($line -match "Disk (\d+)") { $currentDisk = [int]$matches[1] $inPartitionList = $false } # 识别分区列表开始 if ($line -match "Partition ###") { $inPartitionList = $true continue } # 解析分区信息 if ($inPartitionList -and $line -match "Partition +(\d+) +(Primary|Extended|Logical) +(\d+) +MB") { $partitionNumber = [int]$matches[1] $sizeGB = [math]::Round([int]$matches[3] / 1024, 2) $partitionInfo = [PSCustomObject]@{ DiskNumber = $currentDisk # 当前磁盘编号 PartitionNumber = $partitionNumber # 分区编号 DriveLetter = "未知" # Diskpart无法直接获取驱动器号 SizeGB = $sizeGB FileSystem = "未知" Label = "未分配" } $partitions += $partitionInfo } } if ($partitions.Count -gt 0) { Write-Host "通过Diskpart获取到 $($partitions.Count) 个分区" return $partitions } else { Write-Host "Diskpart未检测到分区" return $null } } catch { Write-Host "Diskpart获取分区失败: $_" return $null } } # 多重方法获取分区信息 $partitions = $null $partitions = Get-PartitionsWMI # 优先WMI if (-not $partitions) { $partitions = Get-PartitionsCIM } # 次选CIM if (-not $partitions) { $partitions = Get-PartitionsDiskPart } # 最后Diskpart # 显示分区数据或错误 if ($partitions -and $partitions.Count -gt 0) { $dataGrid.ItemsSource = $partitions $dataGrid.SelectedIndex = 0 # 默认选中第一个分区 } else { $errorLabel = New-Object System.Windows.Controls.Label $errorLabel.Content = "无法获取分区信息。`n请确保以管理员权限运行,或检查磁盘是否正常。" $errorLabel.Foreground = [System.Windows.Media.Brushes]::Red $errorLabel.Margin = "20,0,20,10" $errorLabel.TextWrapping = "Wrap" [System.Windows.Controls.Grid]::SetRow($errorLabel, 1) $mainGrid.Children.Add($errorLabel) } # 创建确认按钮 $confirmButton = New-Object System.Windows.Controls.Button $confirmButton.Content = "安装到所选分区" $confirmButton.FontSize = 14 $confirmButton.Width = 200 $confirmButton.Height = 40 $confirmButton.HorizontalAlignment = "Center" $confirmButton.Margin = "0,0,0,20" $confirmButton.IsDefault = $true [System.Windows.Controls.Grid]::SetRow($confirmButton, 2) $mainGrid.Children.Add($confirmButton) # 确认按钮点击事件(设置MDT默认变量) $confirmButton.Add_Click({ if ($dataGrid.SelectedItem -ne $null) { $selected = $dataGrid.SelectedItem $diskNum = $selected.DiskNumber $partNum = $selected.PartitionNumber $driveLetter = $selected.DriveLetter # 验证编号为整数(MDT默认变量要求) if ($diskNum -match '^\d+$' -and $partNum -match '^\d+$') { $diskNum = [int]$diskNum $partNum = [int]$partNum # 显示确认信息(明确磁盘和分区编号) $message = "即将安装系统到:`n`n" + "磁盘编号(OSDDiskIndex):$diskNum`n" + "分区编号(OSDPartitionIndex):$partNum`n" + "驱动器号:$driveLetter`n`n" + "此操作将清除该分区上的所有数据!`n`n是否继续?" $result = [System.Windows.MessageBox]::Show( $message, "确认分区选择", [System.Windows.MessageBoxButton]::YesNo, [System.Windows.MessageBoxImage]::Warning ) if ($result -eq [System.Windows.MessageBoxResult]::Yes) { # 设置MDT默认变量(无需自定义变量) try { $tsenv = New-Object -ComObject Microsoft.SMS.TSEnvironment $tsenv.Value("OSDDiskIndex") = $diskNum # 磁盘编号(MDT默认变量) $tsenv.Value("OSDPartitionIndex") = $partNum # 分区编号(MDT默认变量) Write-Host "已设置OSDDiskIndex=$diskNum,OSDPartitionIndex=$partNum" $window.Close() } catch { [System.Windows.MessageBox]::Show( "设置MDT变量失败!`n请手动指定:`n磁盘编号=$diskNum,分区编号=$partNum", "错误", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error ) $window.Close() } } } else { [System.Windows.MessageBox]::Show( "无效的磁盘/分区编号(必须为数字)", "错误", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error ) } } else { [System.Windows.MessageBox]::Show( "请先选择一个分区", "未选择分区", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Information ) } }) # 显示窗口 $window.ShowDialog() | Out-Null ``` #### 选硬盘 ``` # MDT 硬盘选择工具(适配OSDDiskIndex变量) # 功能:选择硬盘后将数字类型的硬盘编号写入MDT的OSDDiskIndex变量 Add-Type -AssemblyName PresentationFramework Add-Type -AssemblyName System.Windows.Forms # 创建WPF窗口 $window = New-Object System.Windows.Window $window.Title = "选择系统安装硬盘" $window.Width = 700 $window.Height = 500 $window.WindowStartupLocation = "CenterScreen" $window.ResizeMode = "NoResize" # 主网格布局 $mainGrid = New-Object System.Windows.Controls.Grid $mainGrid.RowDefinitions.Add((New-Object System.Windows.Controls.RowDefinition -Property @{ Height = [System.Windows.GridLength]::Auto })) $mainGrid.RowDefinitions.Add((New-Object System.Windows.Controls.RowDefinition -Property @{ Height = [System.Windows.GridLength]"*" })) $mainGrid.RowDefinitions.Add((New-Object System.Windows.Controls.RowDefinition -Property @{ Height = [System.Windows.GridLength]::Auto })) $window.Content = $mainGrid # 标题 $titleLabel = New-Object System.Windows.Controls.Label $titleLabel.Content = "请选择安装操作系统的硬盘(数字编号对应Diskpart中的磁盘序号):" $titleLabel.FontSize = 14 $titleLabel.Margin = "20,20,20,10" $titleLabel.TextWrapping = "Wrap" [System.Windows.Controls.Grid]::SetRow($titleLabel, 0) $mainGrid.Children.Add($titleLabel) # 硬盘列表DataGrid $dataGrid = New-Object System.Windows.Controls.DataGrid $dataGrid.SelectionMode = "Single" $dataGrid.SelectionUnit = "FullRow" $dataGrid.AutoGenerateColumns = $false $dataGrid.IsReadOnly = $true $dataGrid.Margin = "20,0,20,10" [System.Windows.Controls.Grid]::SetRow($dataGrid, 1) $mainGrid.Children.Add($dataGrid) # 定义列(重点显示数字类型的硬盘编号) $columnDiskNumber = New-Object System.Windows.Controls.DataGridTextColumn $columnDiskNumber.Header = "硬盘编号(Disk Number)" # 明确标注为数字编号 $columnDiskNumber.Binding = New-Object System.Windows.Data.Binding("DiskNumber") $columnDiskNumber.Width = 150 $dataGrid.Columns.Add($columnDiskNumber) $columnModel = New-Object System.Windows.Controls.DataGridTextColumn $columnModel.Header = "硬盘型号" $columnModel.Binding = New-Object System.Windows.Data.Binding("Model") $columnModel.Width = 200 $dataGrid.Columns.Add($columnModel) $columnSize = New-Object System.Windows.Controls.DataGridTextColumn $columnSize.Header = "容量 (GB)" $columnSize.Binding = New-Object System.Windows.Data.Binding("SizeGB") $columnSize.Width = 100 $dataGrid.Columns.Add($columnSize) $columnStyle = New-Object System.Windows.Controls.DataGridTextColumn $columnStyle.Header = "分区样式" $columnStyle.Binding = New-Object System.Windows.Data.Binding("PartitionStyle") $columnStyle.Width = 120 $dataGrid.Columns.Add($columnStyle) # 存储硬盘编号的数组(对应你提供的$Global:ArrayOfDiskNumbers) $Global:ArrayOfDiskNumbers = @() # 获取硬盘信息(确保DiskNumber为数字类型) function Get-ValidDisks { $disks = @() $Global:ArrayOfDiskNumbers.Clear() # 清空数组 try { # 优先使用Get-Disk获取硬盘(确保Number为数字) $physicalDisks = Get-Disk | Where-Object { $_.MediaType -eq "Fixed" } foreach ($disk in $physicalDisks) { $diskNumber = $disk.Number # 硬盘编号(纯数字,如0、1、2) $Global:ArrayOfDiskNumbers += $diskNumber # 存入数组 $diskInfo = [PSCustomObject]@{ DiskNumber = $diskNumber # 明确为数字类型 Model = $disk.Model.Trim() SizeGB = [math]::Round($disk.Size / 1GB, 2) PartitionStyle = switch ($disk.PartitionStyle) { "GPT" { "GPT (UEFI)" } "MBR" { "MBR (Legacy)" } default { "未初始化" } } } $disks += $diskInfo } # 若Get-Disk失败,使用Diskpart备份方案(确保编号为数字) if (-not $disks) { Write-Host "使用Diskpart获取硬盘信息..." $diskpartOutput = diskpart /s (("list disk`nexit" | Out-File "$env:TEMP\diskpart.txt" -Encoding ASCII) -and "$env:TEMP\diskpart.txt") $diskPattern = "^ +(\d+) +(\d+) +(\d+) +(.+)$" foreach ($line in $diskpartOutput) { if ($line -match $diskPattern) { $diskNumber = [int]$matches[1] # 强制转换为数字 $Global:ArrayOfDiskNumbers += $diskNumber $disks += [PSCustomObject]@{ DiskNumber = $diskNumber Model = "物理硬盘(Diskpart检测)" SizeGB = [math]::Round([int]$matches[2] / 1024, 2) PartitionStyle = "未知" } } } } return $disks } catch { Write-Host "获取硬盘信息失败: $_" return $null } } # 加载硬盘数据 $disks = Get-ValidDisks if ($disks) { $dataGrid.ItemsSource = $disks $dataGrid.SelectedIndex = 0 # 默认选中第一个 } else { $errorLabel = New-Object System.Windows.Controls.Label $errorLabel.Content = "未检测到可用硬盘,请检查硬件连接。" $errorLabel.Foreground = [System.Windows.Media.Brushes]::Red $errorLabel.Margin = "20,0,20,10" [System.Windows.Controls.Grid]::SetRow($errorLabel, 1) $mainGrid.Children.Add($errorLabel) } # 确认按钮 $confirmBtn = New-Object System.Windows.Controls.Button $confirmBtn.Content = "确认选择" $confirmBtn.Width = 150 $confirmBtn.Height = 35 $confirmBtn.Margin = "0,0,0,20" $confirmBtn.HorizontalAlignment = "Center" [System.Windows.Controls.Grid]::SetRow($confirmBtn, 2) $mainGrid.Children.Add($confirmBtn) # 确认按钮点击事件(核心:设置OSDDiskIndex为数字) $confirmBtn.Add_Click({ if ($dataGrid.SelectedIndex -ge 0) { # 从数组中获取选中的硬盘编号(确保是数字) $selectedDiskNumber = $Global:ArrayOfDiskNumbers[$dataGrid.SelectedIndex] # 验证编号为数字 if ($selectedDiskNumber -match '^\d+$') { $selectedDiskNumber = [int]$selectedDiskNumber # 强制转换为整数 # 写入MDT的OSDDiskIndex变量(标准变量,要求数字) try { $TSEnv = New-Object -COMObject Microsoft.SMS.TSEnvironment $TSEnv.Value("OSDDiskIndex") = $selectedDiskNumber # 此处必须为数字 Write-Host "已设置OSDDiskIndex=$selectedDiskNumber" [System.Windows.MessageBox]::Show( "将使用硬盘 $selectedDiskNumber 安装系统", "选择成功", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Information ) $window.Close() } catch { [System.Windows.MessageBox]::Show( "设置OSDDiskIndex失败,请手动指定硬盘编号:$selectedDiskNumber", "错误", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error ) $window.Close() } } else { [System.Windows.MessageBox]::Show( "无效的硬盘编号(必须为数字)", "错误", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error ) } } else { [System.Windows.MessageBox]::Show("请先选择硬盘", "提示", [System.Windows.MessageBoxButton]::OK) } }) # 显示窗口 $window.ShowDialog() | Out-Null ``` #### 判断盘 ``` If ((Get-Disk | Where-Object -FilterScript {$_.Bustype -ne 'USB'}).Count -gt 1) {$TSEnv = New-Object -COMObject Microsoft.SMS.TSEnvironment;$TSEnv.Value(‘MoreThanOneHD’)= $true} ``` #### 刷新 ``` \\MDT\MDTBuildLab$\LiteTouch.vbs /DeploymentType:REFRESH ``` #### 跨网段参考 ``` 同网段 ip dhcp pool XXXXX (地址池名字) option 66 ip XX.XX.XX.XX (WDS IP地址) 不同网段 ip dhcp pool XXXXX (地址池名字) next-server XX.XX.XX.XX (WDS的IP) option 66 ip XX.XX.XX.XX (WDS的IP) option 67 ascii Boot\x86\ ``` #### PE驱动 DELL https://www.dell.com/support/kbdoc/zh-cn/000107478/dell-command-%E9%83%A8%E7%BD%B2-winpe-%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E5%8C%85 lenovo https://support.lenovo.com/us/en/solutions/ht074984-microsoft-system-center-configuration-manager-sccm-and-microsoft-deployment-toolkit-mdt-package-index HP http://ftp.ext.hp.com/pub/caps-softpaq/cmit/HP_WinPE_DriverPack.html 阅读全文 2025-08-10 丿记性不太好丶 0 条评论 68 次浏览
Windows系统 Win11跳过硬件检测的方法 在安装界面按shift+F10跳出命令行 输入regedit 打开注册表 HKEY_Local_machine---->system---->setup 新建项 LabConfig 新建32DWord BypassTPMCheck [跳过TPM安全模块检查] BypassSecureBootCheck [跳过安全引导检查] BypassRamCheck [跳过内存检查] BypassStorageCheck [跳过存储检查] BypassCPUCheck [跳过CPU检查] 值全部改为1 oobe/bypassnro [跳过微软账号登录] 阅读全文 2025-07-31 丿记性不太好丶 0 条评论 106 次浏览
活动目录 将损坏的域控制器从域中删除 1、在存活的DC上运行 ntdsutil 2、输入metadata cleanup 3、输入connections 4、输入connect to server XXdc 存活DC的主机名(当前的DC就可以) 5、连接成功后,quit推出connect模式 6、输入select operation target(选择站点、域、服务器) 7、输入list domains(列出域) 8、输入select domain 0(选择要删除dc所在的域,*代表那个域前面显示的数字) 9、输入list sites(列出站点) 10、输入 select site 0(选择要删除的dc所在的站点,*代表站点前面显示的数字) 11、输入 list servers in site(列出所选站点下的服务器) 12、输入 select server *(*代表你要删除的dc前面的序号) 13、选择以后,输入 quit,推到metadata cleanup下 14、输入remove selected server 15、系统会出现对话框,提示是否删除,选择“是” 16、打开“AD站点和服务”,找到要删除的那个DC,删除即可 17、重启服务器 阅读全文 2025-07-29 丿记性不太好丶 0 条评论 111 次浏览
活动目录 win7导入Exchange公网证书后,客户端连接会报错 可能是因为win7系统太旧了,证书链不全,找证书厂商要中间证书,然后通过域策略推送给客户端即可。 通过AD来推送中间证书的步骤 在组策略编辑器中,依次展开 “计算机配置”→“策略”→“Windows 设置”→“安全设置”→“公钥策略”。 导入中间证书即可 客户机通过gpupdate /forece 刷新域策略 阅读全文 2025-07-28 丿记性不太好丶 0 条评论 107 次浏览
活动目录 Windows Server2008R2 升级FRS修改DFS的方法 执行命令查看状态,如果该命令结果为 状态为“已消除”,则表示 DFSR 已用于 SYSVOL 复制。 ``` dfsrmig /getmigrationstate ``` 状态调整方法,一步一步执行,执行一次,获取一次,必须等上一次执行完毕之后,在进行下一阶段的命令。 执行前先要确认AD同步是正常的,使用命令行查看 ``` repadmin /ReplSum ``` 若没有异常则可以进行升级了 域功能级别要是2008才可以进行转换 要在PDC角色的DC上完成切换,如果转移角色了那就是在新的winserver2012上面进行操作 查看PDC ``` netdom /query fsmo ``` 第一步 ``` dfsrmig /setglobalstate 1 dfsrmig /getmigrationstate ``` get出来确认success,执行第二步 ``` dfsrmig /setglobalstate 2 dfsrmig /getmigrationstate ``` 最后进行第三步 ``` dfsrmig /setglobalstate 3 dfsrmig /getmigrationstate ``` 阅读全文 2025-07-28 丿记性不太好丶 0 条评论 95 次浏览