积极答复者
SCCM 推送powershell脚本,提示

问题
-
HI 工程师你好,
我通过sccm推送ps脚本,客户端那边未修改成功,提示如下:
补充:脚本在本地运行是能正常修改计算机名的,通过SCCM进行推送就报以下错误:
错误信息:
Windows PowerShell 脚本开始
开始时间: 20220920154709
用户名: test\SYSTEM
RunAs 用户: test\SYSTEM
配置名称:
计算机: sz-H1FQ2W1332 (Microsoft Windows NT 10.0.19043.0)
主机应用程序: C:\WINDOWS\system32\WindowsPowerShell\v1.0\PowerShell.exe -NonInteractive -NoProfile -ExecutionPolicy RemoteSigned -Command & { . 'C:\WINDOWS\CCM\ScriptStore\777F68BA-A3E0-45D4-9EFD-B6227F5A4BBB_4256B78FC90543A5CD68EB6AB8BDDB8B62E4F52A8011AC3D5ED503B4460292DB.ps1' | ConvertTo-Json -Compress }
进程 ID: 2356
PSVersion: 5.1.19041.1682
PSEdition: Desktop
PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0, 5.1.19041.1682
BuildVersion: 10.0.19041.1682
CLRVersion: 4.0.30319.42000
WSManStackVersion: 3.0
PSRemotingProtocolVersion: 2.3
SerializationVersion: 1.1.0.1
**********************
Renaming computer to sz-H1FQ2W1332-123456789987654321234
NetBIOS 名称将被截断。
计算机的 NetBIOS 名称限制为 15 个字节,在本例中为 15 个字符。NetBIOS 名称将被缩短为“sz-H1FQ2W1332”,这可能会导致在 NetBIOS 名称解析下发生冲突。是否继续?
是(&Y) 否(&N) 暂停(&S)
>> TerminatingError(Rename-Computer):“Windows PowerShell 处于非交互模式。朗读和提示功能不可用。”
Rename-Computer : Windows PowerShell 处于非交互模式。朗读和提示功能不可用。
所在位置 C:\WINDOWS\CCM\ScriptStore\777F68BA-A3E0-45D4-9EFD-B6227F5A4BBB_4256B78FC90543A5CD68EB6AB8BDDB8B62E4F52A8011AC3D5ED
503B4460292DB.ps1:96 字符: 5
+ Rename-Computer -NewName $newName
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Rename-Computer],PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameComputerCommand
Rename-Computer : Windows PowerShell 处于非交互模式。朗读和提示功能不可用。
所在位置 C:\WINDOWS\CCM\ScriptStore\777F68BA-A3E0-45D4-9EFD-B6227F5A4BBB_4256B78FC90543A5CD68EB6AB8BDDB8B62E4F52A8011AC
3D5ED503B4460292DB.ps1:96 字符: 5
+ Rename-Computer -NewName $newName
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Rename-Computer],PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameComputerCommand
Scheduled task unregistered.
Initiating a restart in 10 minutes
**********************
Windows PowerShell 脚本结束
结束时间: 20220920154723
**********************脚本命令如下:
#>
Param()
# If we are running as a 32-bit process on an x64 system, re-launch as a 64-bit process
if ("$env:PROCESSOR_ARCHITEW6432" -ne "ARM64")
{
if (Test-Path "$($env:WINDIR)\SysNative\WindowsPowerShell\v1.0\powershell.exe")
{
& "$($env:WINDIR)\SysNative\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -ExecutionPolicy bypass -File "$PSCommandPath"
Exit $lastexitcode
}
}
# Create a tag file just so Intune knows this was installed
if (-not (Test-Path "$($env:ProgramData)\Microsoft\RenameComputer"))
{
Mkdir "$($env:ProgramData)\Microsoft\RenameComputer"
}
Set-Content -Path "$($env:ProgramData)\Microsoft\RenameComputer\RenameComputer.ps1.tag" -Value "Installed"
# Initialization
$dest = "$($env:ProgramData)\Microsoft\RenameComputer"
if (-not (Test-Path $dest))
{
mkdir $dest
}
Start-Transcript "$dest\RenameComputer.log" -Append
# Make sure we are already domain-joined
$goodToGo = $true
$details = Get-ComputerInfo
if (-not $details.CsPartOfDomain)
{
Write-Host "Not part of a domain."
$goodToGo = $false
}
# Make sure we have connectivity
$dcInfo = [ADSI]"LDAP://RootDSE"
if ($dcInfo.dnsHostName -eq $null)
{
Write-Host "No connectivity to the domain."
$goodToGo = $false
}
if ($goodToGo)
{
# Get the computer serial number and set prefix(重置计算机名为SN号)
$SerialNumber = (Get-WmiObject -class win32_bios).SerialNumber
$newName = "sz-$SerialNumber"
# Set the computer name
Write-Host "Renaming computer to $($newName)"
Rename-Computer -NewName $newName
# Remove the scheduled task
Disable-ScheduledTask -TaskName "RenameComputer" -ErrorAction Ignore
Unregister-ScheduledTask -TaskName "RenameComputer" -Confirm:$false -ErrorAction Ignore
Write-Host "Scheduled task unregistered."
# Make sure we reboot if still in ESP/OOBE by reporting a 1641 return code (hard reboot)
if ($details.CsUserName -match "defaultUser")
{
Write-Host "Exiting during ESP/OOBE with return code 1641"
Stop-Transcript
Exit 1641
}
else {
Write-Host "Initiating a restart in 10 minutes"
& shutdown.exe /g /t 600 /f /c "Restarting the computer due to a computer name change. Save your work."
Stop-Transcript
Exit 0
}
}
else
{
# Check to see if already scheduled
$existingTask = Get-ScheduledTask -TaskName "RenameComputer" -ErrorAction SilentlyContinue
if ($existingTask -ne $null)
{
Write-Host "Scheduled task already exists."
Stop-Transcript
Exit 0
}
# Copy myself to a safe place if not already there
if (-not (Test-Path "$dest\RenameComputer.ps1"))
{
Copy-Item $PSCommandPath "$dest\RenameComputer.PS1"
}
# Create the scheduled task action
$action = New-ScheduledTaskAction -Execute "Powershell.exe" -Argument "-NoProfile -ExecutionPolicy bypass -WindowStyle Hidden -File $dest\RenameComputer.ps1"
# Create the scheduled task trigger
$timespan = New-Timespan -minutes 5
$triggers = @()
$triggers += New-ScheduledTaskTrigger -Daily -At 9am
$triggers += New-ScheduledTaskTrigger -AtLogOn -RandomDelay $timespan
$triggers += New-ScheduledTaskTrigger -AtStartup -RandomDelay $timespan
# Register the scheduled task
Register-ScheduledTask -User SYSTEM -Action $action -Trigger $triggers -TaskName "RenameComputer" -Description "RenameComputer" -Force
Write-Host "Scheduled task created."
}
Stop-Transcript
- 已编辑 深入过-小超 2022年9月20日 7:59
答案
-
>计算机的 NetBIOS 名称限制为 15 个字节,在本例中为 15 个字符。NetBIOS 名称将被缩短为“sz-H1FQ2W1332”,这可能会导致在 NetBIOS 名称解析下发生冲突。是否继续?
根据这个提示,即使跳过这个交互,还是有风险。可能会导致发生冲突。
15个字符的限制,应该是没有办法更改。
-Force 参数 应该是强制更改,会跳过交互。
# Set the computer name
Write-Host "Renaming computer to $($newName)"
Rename-Computer -NewName $newName -ForceRename-Computer (Microsoft.PowerShell.Management) - PowerShell | Microsoft Learn
本帖子以”现状”提供且没有任何担保,同时也没有授予任何权利。 如果您的问题得到解答,请在登录后将此回复标记为“答案”,非常感谢您的支持。
- 已编辑 Xin GuoMicrosoft contingent staff, Moderator 2022年9月21日 7:43
- 已标记为答案 深入过-小超 2022年9月23日 6:16
全部回复
-
>Renaming computer to sz-H1FQ2W1332-123456789987654321234
>NetBIOS 名称将被截断。
>计算机的 NetBIOS 名称限制为 15 个字节,在本例中为 15 个字符。NetBIOS 名称将被缩短为“sz-H1FQ2W1332”,这可能会导致在 NetBIOS 名称解析下发生冲突。是否继续?
>是(&Y) 否(&N) 暂停(&S)看起来这个地方需要交互,所以没有继续下去。这个序列号怎么这么长?
# Get the computer serial number and set prefix(重置计算机名为SN号)
$SerialNumber = (Get-WmiObject -class win32_bios).SerialNumber
$newName = "sz-$SerialNumber"本帖子以”现状”提供且没有任何担保,同时也没有授予任何权利。 如果您的问题得到解答,请在登录后将此回复标记为“答案”,非常感谢您的支持。
-
>计算机的 NetBIOS 名称限制为 15 个字节,在本例中为 15 个字符。NetBIOS 名称将被缩短为“sz-H1FQ2W1332”,这可能会导致在 NetBIOS 名称解析下发生冲突。是否继续?
根据这个提示,即使跳过这个交互,还是有风险。可能会导致发生冲突。
15个字符的限制,应该是没有办法更改。
-Force 参数 应该是强制更改,会跳过交互。
# Set the computer name
Write-Host "Renaming computer to $($newName)"
Rename-Computer -NewName $newName -ForceRename-Computer (Microsoft.PowerShell.Management) - PowerShell | Microsoft Learn
本帖子以”现状”提供且没有任何担保,同时也没有授予任何权利。 如果您的问题得到解答,请在登录后将此回复标记为“答案”,非常感谢您的支持。
- 已编辑 Xin GuoMicrosoft contingent staff, Moderator 2022年9月21日 7:43
- 已标记为答案 深入过-小超 2022年9月23日 6:16