Sunday, June 21, 2020

MDT Sysprep and Capture Fails - WinMain:The sysprep dialog box returned FALSE


In my case, the Sysprep shows running during the task sequence, but the machine restarts immediately. Upon restart, the TS fails with the below error




















I have checked the setupact.log, but everything looks alright except the below line.

WinMain:The sysprep dialog box returned FALSE

So I have checked the setuperr.log and only found the below lines

Error      [0x0f0043] SYSPRP WinMain:The sysprep dialog box returned FALSE
Error         [0x0f0043] SYSPRP WinMain:The sysprep dialog box returned FALSE
Error      [0x0f0043] SYSPRP WinMain:The sysprep dialog box returned FALSE

Most of the time, Sysprep fails due to one or more windows app.so I always run the below command before the capture.

Get-AppxPackage -allusers | where-object {$_.name –notlike "*calc*"} | where-object {$_.name –notlike "*photo*"} | Remove-AppxPackage

The capture was still failing. I have double-checked by running the below command and made sure that the windows apps are removed. (Note: I haven’t removed any .net framework apps)

Run Get-AppxPackage -AllUser | Where PublisherId -eq 8wekyb3d8bbwe | Format-List -Property PackageFullName,PackageUserInformation

Below is what I did to fix my issue with Sysprep.

        Made sure Windows is up to date by running windows update.

      Updated Java to the latest version

     Checked the registry Sysprep registry keys (In My case CleanupState DWord was missing)

HKEY_LOCAL_MACHINE\SYSTEM\Setup\Status\SysprepStatus\CleanupState\ 
Set to value: 2

HKEY_LOCAL_MACHINE\SYSTEM\Setup\Status\SysprepStatus\GeneralizationState\Set to value: 7
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion
\SoftwareProtectionPlatform\SkipRearm 
Set to value: 1 


     Delete the Sysprep Panther folder (C:\windows\system32\sysprep\panther)


        Restarted the machine and after the restart, the Sysprep ran successfully in Task Sequence.



Wednesday, April 1, 2020

Unable to set up budgets on Azure Subscription.

Unable to create budgets on Azure Subscription. Getting Message “Support Coming Soon”


I have tried to change the scope, logged off from the portal and login back and also tried to change the scope resulted in below error.

I have also waited 3-4 hours and checked the Service Health.
I was able to create a budget by typing cost management + Billing in the search box 

Once I clicked on create a budget, I was able to create budget.
The above step also enabled the budget option if you access it through subscription menu


Saturday, March 28, 2020

Unable to see the .csv preview in outlook


The solution is modifying the registry. Please take back up of the registry before proceeding further.
Click Start -> Run and type Regedit.
Expand HKEY_CLASSES_ROOT
You will see ShellEx and a Key underneath with a string value

You have to create the ShellEx and {8895b1c6-b41f-4c1c-a562-0d564250836f} key under .CSV in HKEY_ClASSES_ROOT
On my machine I can only see the below under .csv

 Right click on .CSV and select New and select Key
And enter ShellEx for the key Value
Now Right Click on ShellEx and Create a new key and name
{8895b1c6-b41f-4c1c-a562-0d564250836f}
You can always copy the key from .xls
Now highlight {8895b1c6-b41f-4c1c-a562-0d564250836f} and Double Click Default 
Enter the value {00020827-0000-0000-C000-000000000046}
Click Ok and exit out of registry.
Logoff and log in back and you should be able to see .csv preview in outlook


Outlook search box moved to the top of the screen


To move the outlook search button, click on the ‘Coming Soon’ label on the top right-hand corner and change it to off. Restart outlook and you will see the search box moved back to the correct location.
If coming soon is already off and the search bar is on top then turn on the ‘coming soon’ and restart outlook and then turn it off again.

Thursday, December 12, 2019

HP BIOS Update during OS Deployment - MDT

This blog is about how I added BIOS Update in Task Sequence.
Courtesy - https://deploymentbunny.com/2016/07/20/osd-bios-upgrade-during-os-deployment-in-mdtconfigmgr-v3/

The main reason to modify the script is that the amount of different model we have in our production. Even though the majority of them are HP, but it was kept on growing.

The things you need to get it working are listed below.

ModelAliasExit.vbs
InstallBios.ps1
HPBIOS Updates

First Copy the ModelAliasExit.vbs to the script folder in the deployment share. This script is used to detect the Model of the machine.  Please download it from the below location.

https://github.com/DeploymentResearch/DRFiles/blob/master/Scripts/ModelAliasExit.vbs

Once the script is copied, Edit the custom.ini file and add the below lines at the top.

[Settings]
Priority=Default
Properties=NeedReboot,MakeAlias,ModelAlias

After editing the custom.ini file, Copy the below script to notepad and save it as InstallBios.ps1.

#Set BIOS Update File

Function Import-SMSTSENV{
    try
    {
        $tsenv = New-Object -COMObject Microsoft.SMS.TSEnvironment
        Write-Output "$ScriptName - tsenv is $tsenv "
        $MDTIntegration = "YES"
       
        #$tsenv.GetVariables() | % { Write-Output "$ScriptName - $_ = $($tsenv.Value($_))" }
    }
    catch
    {
        Write-Output "$ScriptName - Unable to load Microsoft.SMS.TSEnvironment"
        Write-Output "$ScriptName - Running in standalonemode"
        $MDTIntegration = "NO"
    }
    Finally
    {
    if ($MDTIntegration -eq "YES"){
        $Logpath = $tsenv.Value("LogPath")
        $LogFile = $Logpath + "\" + "$ScriptName.log"

    }
    Else{
        $Logpath = $env:TEMP
        $LogFile = $Logpath + "\" + "$ScriptName.log"
    }
    }
}
Function Start-Logging{
    start-transcript -path $LogFile -Force
}
Function Stop-Logging{
    Stop-Transcript
}
Function Invoke-Exe{
    [CmdletBinding(SupportsShouldProcess=$true)]

    param(
        [parameter(mandatory=$true,position=0)]
        [ValidateNotNullOrEmpty()]
        [string]
        $Executable,

        [parameter(mandatory=$false,position=1)]
        [string]
        $Arguments
    )

    if($Arguments -eq "")
    {
        Write-Verbose "Running $ReturnFromEXE = Start-Process -FilePath $Executable -ArgumentList $Arguments -NoNewWindow -Wait -Passthru"
        $ReturnFromEXE = Start-Process -FilePath $Executable -NoNewWindow -Wait -Passthru
    }else{
        Write-Verbose "Running $ReturnFromEXE = Start-Process -FilePath $Executable -ArgumentList $Arguments -NoNewWindow -Wait -Passthru"
        $ReturnFromEXE = Start-Process -FilePath $Executable -ArgumentList $Arguments -NoNewWindow -Wait -Passthru
    }
    Write-Verbose "Returncode is $($ReturnFromEXE.ExitCode)"
    Return $ReturnFromEXE.ExitCode
}

# Set vars
$SCRIPTDIR = split-path -parent $MyInvocation.MyCommand.Path
$SCRIPTNAME = split-path -leaf $MyInvocation.MyCommand.Path
$SOURCEROOT = "$SCRIPTDIR\Source"
$SettingsFile = $SCRIPTDIR + "\" + $SettingsName
$LANG = (Get-Culture).Name
$OSV = $Null
$ARCHITECTURE = $env:PROCESSOR_ARCHITECTURE


#Try to Import SMSTSEnv
. Import-SMSTSENV

# Set more vars
$Make = $tsenv.Value("Make")
$Model = $tsenv.Value("Model")
$ModelAlias = $tsenv.Value("ModelAlias")
$MakeAlias = $tsenv.Value("MakeAlias")

#Get Bios Info from source folder

$CurrentBiosVersion = Get-Content "$SCRIPTDIR\Source\$Model\BIOSVer.txt"
$BIOSName = Get-Content "$SCRIPTDIR\Source\$Model\BIOSName.txt"

#Start Transcript Logging

. Start-Logging

#Output base info
Write-Output ""
Write-Output "$ScriptName - ScriptDir: $ScriptDir"
Write-Output "$ScriptName - SourceRoot: $SOURCEROOT"
Write-Output "$ScriptName - ScriptName: $ScriptName"
Write-Output "$ScriptName - Current Culture: $LANG"
Write-Output "$ScriptName - Integration with MDT(LTI/ZTI): $MDTIntegration"
Write-Output "$ScriptName - Log: $LogFile"
Write-Output "$ScriptName - Model (win32_computersystem): $((Get-WmiObject Win32_ComputerSystem).model)"
Write-Output "$ScriptName - Name (Win32_ComputerSystemProduct): $((Get-WmiObject Win32_ComputerSystemProduct).Name)"
Write-Output "$ScriptName - Version (Win32_ComputerSystemProduct): $((Get-WmiObject Win32_ComputerSystemProduct).Version)"
Write-Output "$ScriptName - Model (from TSENV): $Model"
Write-Output "$ScriptName - ModelAlias (from TSENV): $ModelAlias"

#Check Model
if($((Get-WmiObject Win32_ComputerSystem).model) -eq $Model){
    Write-Output "Model is $((Get-WmiObject Win32_ComputerSystem).model)"
    Write-Output "Checking BIOS Version"
    Write-Output "Version is $((Get-WmiObject Win32_Bios).SMBIOSBIOSVersion)"
    if($((Get-WmiObject Win32_Bios).SMBIOSBIOSVersion) -ne $CurrentBiosVersion){
        Write-Output "Needs upgrade"
        $Exe = 'HPBIOSUPDREC64.exe'
        $Location = "$SCRIPTDIR\Source\$Model"
        $Executable = $Location + "\" + $exe
        Set-Location -Path $Location
        Invoke-Exe -Executable "$Executable" -Arguments "-s -r -f $BIOSName -b" -Verbose
    }
    else
    {
        Write-Output "No Need to upgrade"
    }
}

#Stop Logging
. Stop-Logging

Next, create an application using InstallBios.ps1.



Make sure the folder structure is correct as per the below picture.
Please download and copy the bios file to the source folder and make sure it the folder name is the same as the machine model name.


Once you copied the necessary BIOS file, you have to create two text files called BIOSName.txt and BIOSVer.txt.

BIOSName.txt file has the name of the BIOS File, and BIOSVer.txt has the BIOS Version






















Next step is to add the application to the task sequence. Make sure you add the task it in the system restore section of the task sequence. I have created a group called 'BIOS Update' and add the application. A computer restart is necessary after the BIOS installation, you can add it in the script or create a computer restart task.



















Update the deployment share and you are ready to run the task sequence.


Saturday, October 26, 2019

Unable to install Optional Windows Features on Windows 10

Right-click on the start button and select run and type "gpedit.msc" to edit your local computer policy. Expand Computer Configuration\AdministrativeTemplates\System

In the system folder, you can see the option "Specify settings for optional component installation and component repair".




Enable the policy and select the checkbox "Download repair content and optional features directly from Windows Update instead of Windows Server Update Services (WSUS)"



You should be able to install the windows features now




Thursday, August 1, 2019

The trust relationship between this workstation and the Primary domain failed on Windows 10

The easy way to fix is to reset the computer account in Active Directory. Most of the time the machine will let you log in after resetting the account in Active Directory
If you can't resolve it by resetting the computer account, then log in to the machine as the local administrator. Remove it from the domain (Join to Workgroup) and rejoin to the domain.

How to Install RSAT on Windows 11 - 23H2

 Run Powershell as Admin Change the following registry key that manages the Windows Update source. HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Micr...