none
SCCM 推送powershell脚本,提示 RRS feed

  • 问题

  • 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:58

答案

  • >计算机的 NetBIOS 名称限制为 15 个字节,在本例中为 15 个字符。NetBIOS 名称将被缩短为“sz-H1FQ2W1332”,这可能会导致在 NetBIOS 名称解析下发生冲突。是否继续?


    根据这个提示,即使跳过这个交互,还是有风险。可能会导致发生冲突。

    15个字符的限制,应该是没有办法更改。

    -Force 参数 应该是强制更改,会跳过交互。

     # Set the computer name
        Write-Host "Renaming computer to $($newName)"
        Rename-Computer -NewName $newName -Force

    Rename-Computer (Microsoft.PowerShell.Management) - PowerShell | Microsoft Learn


    本帖子以”现状”提供且没有任何担保,同时也没有授予任何权利。 如果您的问题得到解答,请在登录后将此回复标记为“答案”,非常感谢您的支持。


    2022年9月21日 7:35
    版主

全部回复

  • >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"


    本帖子以”现状”提供且没有任何担保,同时也没有授予任何权利。 如果您的问题得到解答,请在登录后将此回复标记为“答案”,非常感谢您的支持。

    2022年9月21日 2:13
    版主
  • HI Xin Guo,

         多谢您的回复。

    因为SN我是通过hyper-v 配置文件进行更改的,如果我不更改这么长,那么手动运行这个脚本会出错。

    这个交互的地方有办法更改吗?

    2022年9月21日 6:43
  • >计算机的 NetBIOS 名称限制为 15 个字节,在本例中为 15 个字符。NetBIOS 名称将被缩短为“sz-H1FQ2W1332”,这可能会导致在 NetBIOS 名称解析下发生冲突。是否继续?


    根据这个提示,即使跳过这个交互,还是有风险。可能会导致发生冲突。

    15个字符的限制,应该是没有办法更改。

    -Force 参数 应该是强制更改,会跳过交互。

     # Set the computer name
        Write-Host "Renaming computer to $($newName)"
        Rename-Computer -NewName $newName -Force

    Rename-Computer (Microsoft.PowerShell.Management) - PowerShell | Microsoft Learn


    本帖子以”现状”提供且没有任何担保,同时也没有授予任何权利。 如果您的问题得到解答,请在登录后将此回复标记为“答案”,非常感谢您的支持。


    2022年9月21日 7:35
    版主