Troubleshoot PowerShell Script during OSD

I am very new to SCCM OSD. I've been doing MDT OSD for some time, and I can generally figure MDT issues out.
We're in the middle of setting up the SCCM 2012 SP1 environment. MDT has not been integrated. The contractors that are assisting have already built and tested several task sequences. I'm trying to troubleshoot a script but I'm having a hard time getting
anywhere.
I have 2 questions:
Is there any way to show the Windows shell during OSD?
Is the tsenv: already created, or do I need to use "New-Object -COMObject Microsoft.SMS.TSEnvironment"

#1: which one? Programs/applications that are run during the TS are not allowed to interact with the desktop, but you can press F8 to bring up a cmd
#2: This object has to be created.
Torsten Meringer | http://www.mssccmfaq.de

Similar Messages

  • (Powershell script) Move Computer to Windows 8 OU based on prior OU set in OSD variable in OSD

    We have Windows 7 and Windows 8 machines that get configured through SCCM 2012 OSD. In my task sequence I have the computer joined to an OU based on the drop down selection. However I cannot write something into the javascript to put a computer into the
    sub ou labeled windows 8. I would like to write a powershell script that will put the computer into the sub OU based on what was selected earlier.
    Example: Computer is joined to Sales OU in our organization. There is a sub OU called Windows 8 under the Sales. If Sales is selected then it should join that subOU Windows 8.  Has anyone accomplished this task before? How would I write this? I have enclosed
    a photo of what my OSD looks like. Very simple. This hta exports the OSDDomainOU variable out and the apply network settings task sequence grabs it and joins it to the selected OU.

    I would use a switch statement and it would be something like this
    function Set-OSDVariable
    Param (
    [string]$OSDVariable,
    [string]$OSDVarValue
    $tsenv = New-Object -ComObject Microsoft.SMS.TSEnvironment
    $tsenv.Value($OSDVariable) = $OSDVarValue
    function Get-OSDVariable
    Param (
    [string]$OSDGetVar
    $tsenv = New-Object -ComObject Microsoft.SMS.TSEnvironment
    $tstOSDVar = $tsenv.Value("$OSDGetVar")
    return $tstOSDVar
    $osddomainou = Get-OSDvariable -OSDGetVar "osddomainouname"
    switch($osddomainou)
    "external" { Set-OSDVariable -OSDVariable "osdomainnameou" -OSDVarValue "win8 external ou" }
    The function included in the script above sets OSD Variables and I call it on the switch statement. Follow that format for the rest of the possible OU's. I've also included a function to get the variable too. 

  • OSD - Task Sequence to run powershell script

    Hello,
    I'm building up an image with OSD and will be layering some components to meet our needs with some powershell scripts. At the moment we will not have this device add itself to the domain so it'll be in a workgroup. The scripts are on a share that everyone has
    read access to. Should I add a task sequence that will map a drive letter with domain credentials and have the task sequence call the script from that drive letter?

    That is possible to do, but why would you not create a package/application with the script and let it download and run locally? 
    Daniel Ratliff | http://www.PotentEngineer.com

  • Run a powershell script with domain credentials during task sequence

    I have a powershell script that adds the computer it is run on to a security group.  If I log onto the computer with a domain account it works perfectly.  However, if it is run while logged on as the local admin account it fails with an error message
    that says the domain either doesn't exist or cannot be reached.
    This is a problem because when a computer is being imaged the process runs with the local admin account.  Is there a way to run this script with domain credentials in the task sequence?
    Thanks,
    Andy

    How are you running the Powershell script? If you use a Run Command Line step, you can specify an account to run as. Something like "powershell %scriptroot%\psscript.ps1" where the psscript.ps1 is located in your Scripts folder in your deployment
    share.
    -Nick O.

  • Getting Access is Denied when Running Script in OSD Task Sequence

    I am attempting put in a script that will move the computer account to the proper OU in AD.  I have the script but when it launches inside of the TS I get "CScript Error: Loading script "C:\_SMSTaskSequence\WDPackage\Scripts\MoveOU.vbs" failed
    (Access is denied. )."
    I am using the Run Command Line, and using the "Run this step as the following account"  I have verified that the account has access to do what I need it to do in AD.  I have attached the logs as well.
    PackageID = 'WI10015A' InstallSoftware
    3/21/2012 8:46:53 AM 3316 (0x0CF4)
    BaseVar   = '', ContinueOnError='' InstallSoftware
    3/21/2012 8:46:53 AM 3316 (0x0CF4)
    SwdAction = '0001' InstallSoftware
    3/21/2012 8:46:53 AM 3316 (0x0CF4)
    Getting linked token InstallSoftware
    3/21/2012 8:46:53 AM 3316 (0x0CF4)
    failed to get the token information InstallSoftware
    3/21/2012 8:46:53 AM 3316 (0x0CF4)
    Get RunAs private desktop SMSTS-169042\SMSTSDesktop
    InstallSoftware 3/21/2012 8:46:54 AM
    3316 (0x0CF4)
    Run command line under a user account InstallSoftware
    3/21/2012 8:46:54 AM 3316 (0x0CF4)
    Found the location for the package _SMSTSWI10015A. The location is on \\<SCCMSERVERNAME>\SMSPKGF$\WI10015A\
    InstallSoftware 3/21/2012 8:46:54 AM
    3316 (0x0CF4)
    nPos != CCM::Utility::String::npos, HRESULT=80004005 (e:\nts_sms_fre\sms\framework\tscore\resolvesource.cpp,253)
    InstallSoftware 3/21/2012 8:46:54 AM
    3316 (0x0CF4)
    Creating a connection to \\<SCCMSERVERNAME>\SMSPKGF$\WI10015A\ with default account
    InstallSoftware 3/21/2012 8:46:54 AM
    3316 (0x0CF4)
    Connection request for "\\<SCCMSERVERNAME>\SMSPKGF$\WI10015A"
    InstallSoftware 3/21/2012 8:46:54 AM
    3316 (0x0CF4)
    No credentials available for connecting to "\\<SCCMSERVERNAME>\SMSPKGF$\WI10015A". See whether the share has already been connected.
    InstallSoftware 3/21/2012 8:46:54 AM
    3316 (0x0CF4)
    Connecting to "\\<SCCMSERVERNAME>\SMSPKGF$\WI10015A"
    InstallSoftware 3/21/2012 8:46:54 AM
    3316 (0x0CF4)
    Successfully connected to "\\<SCCMSERVERNAME>\SMSPKGF$\WI10015A"
    InstallSoftware 3/21/2012 8:46:54 AM
    3316 (0x0CF4)
    Resolved source to '\\<SCCMSERVERNAME>\SMSPKGF$\WI10015A'
    InstallSoftware 3/21/2012 8:46:54 AM
    3316 (0x0CF4)
    Command line for extension .exe is "%1" %* InstallSoftware
    3/21/2012 8:46:54 AM 3316 (0x0CF4)
    Set command line: Run command line InstallSoftware
    3/21/2012 8:46:54 AM 3316 (0x0CF4)
    Working dir '\\<SCCMSERVERNAME>\SMSPKGF$\WI10015A'
    InstallSoftware 3/21/2012 8:46:54 AM
    3316 (0x0CF4)
    Executing command line: Run command line InstallSoftware
    3/21/2012 8:46:54 AM 3316 (0x0CF4)
    Create a process under given user token InstallSoftware
    3/21/2012 8:46:54 AM 3316 (0x0CF4)
    Process completed with exit code 1 InstallSoftware
    3/21/2012 8:46:54 AM 3316 (0x0CF4)
    Microsoft (R) Windows Script Host Version 5.8
    InstallSoftware 3/21/2012 8:46:54 AM
    3316 (0x0CF4)
    Copyright (C) Microsoft Corporation. All rights reserved.
    InstallSoftware 3/21/2012 8:46:54 AM
    3316 (0x0CF4)
    InstallSoftware 3/21/2012 8:46:54 AM
    3316 (0x0CF4)
    CScript Error: Loading script "C:\_SMSTaskSequence\WDPackage\Scripts\MoveOU.vbs" failed (Access is denied. ).
    InstallSoftware
    3/21/2012 8:46:54 AM 3316 (0x0CF4)
    Command line returned 1 InstallSoftware
    3/21/2012 8:46:54 AM 3316 (0x0CF4)
    Entering ReleaseSource() for \\<SCCMSERVERNAME>\SMSPKGF$\WI10015A\
    InstallSoftware 3/21/2012 8:46:54 AM
    3316 (0x0CF4)
    reference count 1 for the source \\<SCCMSERVERNAME>\SMSPKGF$\WI10015A\ before releasing
    InstallSoftware 3/21/2012 8:46:54 AM
    3316 (0x0CF4)
    Released the resolved source \\<SCCMSERVERNAME>\SMSPKGF$\WI10015A\
    InstallSoftware 3/21/2012 8:46:54 AM
    3316 (0x0CF4)
    Process completed with exit code 1 TSManager
    3/21/2012 8:46:54 AM 2520 (0x09D8)
    TSManager 3/21/2012 8:46:54 AM
    2520 (0x09D8)
    Failed to run the action: Move Computer to Correct OU. 
    Incorrect function. (Error: 00000001; Source: Windows)
    TSManager 3/21/2012 8:46:54 AM
    2520 (0x09D8)
    Sending status message . . . TSManager
    3/21/2012 8:46:54 AM 2520 (0x09D8)
    Send a task execution status message SMS_TSExecution_ActionFailError
    TSManager 3/21/2012 8:46:54 AM
    2520 (0x09D8)
    MP server <SCCMSERVERNAME> and port 80. SSL=false. CRL=false.
    TSManager 3/21/2012 8:46:54 AM
    2520 (0x09D8)
    Site code: WI1 TSManager
    3/21/2012 8:46:54 AM 2520 (0x09D8)
    Client machine name: 1J44KQ1 TSManager
    3/21/2012 8:46:54 AM 2520 (0x09D8)
    Client Identity: GUID:6ffb32d4-1184-4e40-a1c8-26272a707a72
    TSManager 3/21/2012 8:46:54 AM
    2520 (0x09D8)
    Advertisement ID: WI12029D TSManager
    3/21/2012 8:46:54 AM 2520 (0x09D8)
    Package ID: WI1001E7 TSManager
    3/21/2012 8:46:54 AM 2520 (0x09D8)
    Sending StatusMessage TSManager
    3/21/2012 8:46:54 AM 2520 (0x09D8)
    Formatted header: TSManager
    3/21/2012 8:46:54 AM 2520 (0x09D8)
    <Msg SchemaVersion="1.1" ReplyCompression="zlib"><ID/><SourceID>ABB94CBE-33F4-4EB9-A151-34EE3474A0F9</SourceID><SourceHost/><TargetAddress>mp:[http]MP_StatusManager</TargetAddress><ReplyTo>direct:OSD</ReplyTo><Priority>3</Priority><Timeout>3600</Timeout><SentTime>2012-03-21T12:46:54Z</SentTime><Protocol>http</Protocol><Body
    Type="ByteRange" Offset="0" Length="4174"/><Hooks/><Payload Type="inline"/><TargetHost/><TargetEndpoint>StatusReceiver</TargetEndpoint><ReplyMode>Sync</ReplyMode><CorrelationID/></Msg>
    TSManager
    3/21/2012 8:46:54 AM 2520 (0x09D8)
    CLibSMSMessageWinHttpTransport::Send: URL: <SCCMSERVERNAME>:80  CCM_POST /ccm_system/request
    TSManager 3/21/2012 8:46:54 AM
    2520 (0x09D8)
    The request has succeeded. 200 OK TSManager
    3/21/2012 8:46:55 AM 2520 (0x09D8)
    Set a global environment variable _SMSTSLastActionRetCode=1
    TSManager 3/21/2012 8:46:55 AM
    2520 (0x09D8)
    Set a global environment variable _SMSTSLastActionSucceeded=false
    TSManager 3/21/2012 8:46:55 AM
    2520 (0x09D8)
    Clear local default environment TSManager
    3/21/2012 8:46:55 AM 2520 (0x09D8)
    Let the parent group (Testing) decides whether to continue execution
    TSManager 3/21/2012 8:46:55 AM
    2520 (0x09D8)
    The execution of the group (Testing) has failed and the execution has been aborted. An action failed.
    Operation aborted (Error: 80004004; Source: Windows)
    TSManager 3/21/2012 8:46:55 AM
    2520 (0x09D8)
    Failed to run the last action: Move Computer to Correct OU. Execution of task sequence failed.
    Incorrect function. (Error: 00000001; Source: Windows)
    TSManager 3/21/2012 8:46:55 AM
    2520 (0x09D8)
    Any suggestions would be greatly appreciated!
    "You can't fix stupid!"

    I'm having the exact same issue.  I'm using AutoIT for my script to move the computer account.  I've tried using ADO, LDAP, and LDAP/ADSystemInfo object.  They all fail with access denied.  In fact the ADO version of my script fails just
    trying to create the "ADODB.Connection" object which I know for a fact doesn't require elevation or administrator access.  However, all three versions of the script work correctly when run manually outside the TS.  They also work correctly on XP
    machines during OSD.  Only when deploying a Win7 machine do they fail during the TS.  I've tried adding the runas user to the local administrators group beforehand but no dice.  Did you have to restart the computer after doing the net localgroup
    change?  There has to be some other security config in Win7 that is set somewhere doing this.  I just can't figure out what.  I've even started looking at DCOM/COM permissions to see if something isn't right there.
    I don't see why but maybe the script needs to be run locally?  Any other ideas?

  • Looking for a Powershell Script which can put the scom servers in maintenance mode

    Looking for a Powershell Script which can put the scom servers in maintenance mode so that SCOM should not send an alert during planned task.
    Rahul

    1. Provide list of servers line-by-line in C:\ServerList.txt, make sure you provide limited no. of servers, do not exceed 20 - 25 per batch
    2. Save the script with suitable name (test.ps1)
    3. Open PowerShell cmd prompt
    4. Script accepts 3 params - TimeInMinutes, Reason and Comment
    **** Please note, this script will work for SCOM 2012 R2
    param([int32]$TimeMin, [string]$Reason, [string]$Comment)
    try
    $api = new-object -comObject 'MOM.ScriptAPI'
    Import-Module operationsmanager
    New-SCOMManagementGroupConnection
    $Servers = Get-Content "C:\ServerList.txt"
    $Time = (Get-Date).Addminutes($TimeMin)
    Foreach ($Server in $Servers)
    #Get Computer instance
    $ComputerClass = Get-SCOMClass -Name Microsoft.Windows.Computer
    $ComputerClassInstance = Get-SCOMClassInstance  -Class $ComputerClass | Where {$_.DisplayName -eq $Server}
    If ($ComputerClassInstance -ne $Null)
    $HealthServiceWatcherClass = Get-SCOMClass -name:Microsoft.SystemCenter.HealthServiceWatcher
    #Get Health Service Watcher Class instance of the server
    $HSWClass = Get-SCOMClass -Name Microsoft.SystemCenter.HealthServiceWatcher
    $HSWClassIns = Get-SCOMClassInstance  -Class $HSWClass | Where {$_.DisplayName -eq $Server}
    #Starting the maintenance mode
    Start-SCOMMaintenanceMode -Instance $HSWClassIns -EndTime $Time -Reason $Reason -Comment $Comment
    Start-SCOMMaintenanceMode -Instance $ComputerClassInstance -EndTime $Time  -Reason $Reason -Comment $Comment
    Write-Host "Health Service Watcher and Agent server "$Server " kept in maintenance mode"  -foregroundcolor "green"
    $api.LogScriptEvent('MaintenanceModeScript.ps1', 200, 0, "$Server kept in maintenance mode for $TimeMin minutes")
    Else
    Write-Host $Server" not found " -foregroundcolor "red"
    $api.LogScriptEvent('MaintenanceModeScript.ps1', 201, 1, "$Server could not be found in domain")
    Catch [system.exception]
    $api.LogScriptEvent('MaintenanceModeScript.ps1', 201, 1, $_.Exception.Message)
    Faizan

  • Help modifying a powershell script

    Hello,
    I have recently been given a task to write/find a script that is capable of performing Full and Incremental backups. I found a script that does exactly what I need, however, it requires user input. I need this to be a scheduled task and therefore I need
    the input to be a static path. Here is the script I am talking about:
    #region Params
    param(
    [Parameter(Position=0, Mandatory=$true,ValueFromPipeline=$true)]
    [ValidateScript({Test-Path -LiteralPath $_ -PathType 'Container'})] 
    [System.String]
    $SourceDir,
    [Parameter(Position=1, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateScript({Test-Path -LiteralPath $_ -PathType 'Container'})] 
    [System.String]
    $DestDir,
    [Parameter(Position=2, Mandatory=$false,ValueFromPipeline=$false)]
    [ValidateScript({Test-Path -LiteralPath $_ -PathType 'Container'})] 
    [System.String]
    $HashPath,
    [Parameter(Position=3, Mandatory=$false,ValueFromPipeline=$false)]
    [ValidateSet("Full","Incremental","Differential")] 
    [System.String]
    $BackupType="Full",
    [Parameter(Position=4, Mandatory=$false,ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()]  
    [System.String]
    $LogFile=".\Backup-Files.log",
    [Parameter(Position=5, Mandatory=$false,ValueFromPipeline=$false)]
    [System.Management.Automation.SwitchParameter]
    $SwitchToFull
    #endregion 
    begin{
    function Write-Log
    #region Params
    [CmdletBinding()]
    [OutputType([System.String])]
    param(
    [Parameter(Position=0, Mandatory=$true,ValueFromPipeline=$true)]
    [ValidateNotNullOrEmpty()]
    [System.String]
    $Message,
    [Parameter(Position=1, Mandatory=$true,ValueFromPipeline=$true)]
    [ValidateNotNullOrEmpty()]
    [System.String]
    $LogFile
    #endregion
    try{
    Write-Host $Message
    Out-File -InputObject $Message -Append $LogFile
    catch {throw $_}
    function Get-Hash 
    #region Params
    [CmdletBinding()]
    [OutputType([System.String])]
    param(
    [Parameter(Position=0, Mandatory=$true,ValueFromPipeline=$true)]
    [ValidateNotNullOrEmpty()]
    [System.String]
    $HashTarget,
    [Parameter(Position=1, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateSet("File","String")]
    [System.String]
    $HashType
    #endregion
    begin{
    try{ $objGetHashMD5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider } 
    catch {throw $_ }
    process{
    try {
    #Checking hash target is file or just string
    switch($HashType){
    "String" {
    $objGetHashUtf8 = New-Object -TypeName System.Text.UTF8Encoding
    $arrayGetHashHash = $objGetHashMD5.ComputeHash($objGetHashUtf8.GetBytes($HashTarget.ToUpper()))
    break
    "File" {
    $arrayGetHashHash = $objGetHashMD5.ComputeHash([System.IO.File]::ReadAllBytes($HashTarget))
    break
    #Return hash
    Write-Output $([System.Convert]::ToBase64String($arrayGetHashHash))
    catch { throw $_ }
    function Copy-File
    #region Params
    [CmdletBinding()]
    [OutputType([System.String])]
    param(
    [Parameter(Position=0, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateScript({Test-Path -LiteralPath $_ -PathType 'Any'})] 
    [System.String]
    $SourceFile,
    [Parameter(Position=1, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()] 
    [System.String]
    $DestFile
    #endregion
    try{
    #The script fails when folder being copied to file. So the item will be removed to avoid the error.
    if(Test-Path -LiteralPath $DestFile -PathType Any){
    Remove-Item -LiteralPath $DestFile -Force -Recurse
    #Creating destination if doesn't exist. It's required because Copy-Item doesn't create destination folder
    if(Test-Path -LiteralPath $SourceFile -PathType Leaf){
    New-Item -ItemType "File" -Path $DestFile -Force
    #Copying file to destination directory
    Copy-Item -LiteralPath $SourceFile -Destination $DestFile -Force
    catch{ throw $_ }
    function Backup-Files
    #region Params
    [CmdletBinding()]
    [OutputType([System.String])]
    param(
    [Parameter(Position=0, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateScript({Test-Path -LiteralPath $_ -PathType 'Container'})] 
    [System.String]
    $SourceDir,
    [Parameter(Position=1, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()] 
    [System.String]
    $DestDir,
    [Parameter(Position=2, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateNotNull()] 
    [System.Collections.Hashtable]
    $HashTable
    #endregion
    try{
    $xmlBackupFilesHashFile = $HashTable
    Write-Host "Backup started" 
    Get-ChildItem -Recurse -Path $SourceDir|ForEach-Object{
    $currentBackupFilesItem = $_
    #Full path to source and destination item
    $strBackupFilesSourceFullPath = $currentBackupFilesItem.FullName
    $strBackupFilesDestFullPath = $currentBackupFilesItem.FullName.Replace($SourceDir,$DestDir)
    #Checking that the current item is file and not directory. True - the item is file. 
    $bBackupFilesFile = $($($currentBackupFilesItem.Attributes -band [System.IO.FileAttributes]::Directory) -ne [System.IO.FileAttributes]::Directory)
    Write-Host -NoNewline ">>>Processing item $strBackupFilesSourceFullPath..."
    #Generating path hash
    $hashBackupFilesPath = $(Get-Hash -HashTarget $strBackupFilesSourceFullPath -HashType "String")
    $hashBackupFilesFile = "d"
    #If the item is file then generate hash for file content
    if($bBackupFilesFile){
    $hashBackupFilesFile = $(Get-Hash -HashTarget $strBackupFilesSourceFullPath -HashType "File")
    #Checking that the file has been copied
    if($xmlBackupFilesHashFile[$hashBackupFilesPath] -ne $hashBackupFilesFile){
    Write-Host -NoNewline $("hash changed=>$hashBackupFilesFile...")
    Copy-File -SourceFile $strBackupFilesSourceFullPath $strBackupFilesDestFullPath|Out-Null
    #Returning result
    Write-Output @{$hashBackupFilesPath=$hashBackupFilesFile}
    else{
    Write-Host -NoNewline "not changed..."
    Write-Host "done"
    Write-Host "Backup completed"
    catch { throw $_ }
    function Backup-Full
    [CmdletBinding()]
    [OutputType([System.String])]
    #region Params
    param(
    [Parameter(Position=0, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateScript({Test-Path -LiteralPath $_ -PathType 'Container'})] 
    [System.String]
    $SourceDir,
    [Parameter(Position=1, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()] 
    [System.String]
    $DestDir,
    [Parameter(Position=2, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()] 
    [System.String]
    $HashFile,
    [Parameter(Position=3, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()]  
    [System.String]
    $ChainKey
    #endregion
    try{
    #Creating an empty hash table
    $xmlBackupFullHashFile = @{}
    #Starting directory lookup 
    $uintBackupFullCount = 0
    Backup-Files -SourceDir $SourceDir -DestDir $("$DestDir\$ChainKey\Full_" + $(Get-Date -Format "ddMMyyyy")) -HashTable $xmlBackupFullHashFile|`
    ForEach-Object{ 
    $xmlBackupFullHashFile.Add([string]$_.Keys,[string]$_.Values) 
    $uintBackupFullCount++
    #Saving chain key.
    $xmlBackupFullHashFile.Add("ChainKey",$ChainKey)
    Write-Host -NoNewline "Saving XML file to $HashFile..."
    Export-Clixml -Path $HashFile -InputObject $xmlBackupFullHashFile -Force
    Write-Host "done"
    Write-Output $uintBackupFullCount
    catch { throw $_ }
    function Backup-Diff
    #region Params
    [CmdletBinding()]
    [OutputType([System.String])]
    param(
    [Parameter(Position=0, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateScript({Test-Path -LiteralPath $_ -PathType 'Container'})] 
    [System.String]
    $SourceDir,
    [Parameter(Position=1, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()] 
    [System.String]
    $DestDir,
    [Parameter(Position=2, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateScript({Test-Path -LiteralPath $_ -PathType 'leaf'})]
    [System.String]
    $HashFile
    #endregion
    try{
    #Loading hash table
    $xmlBackupDiffHashFile = Import-Clixml $HashFile
    $chainKeyBackupDiffDifferential = $xmlBackupDiffHashFile["ChainKey"]
    $uintBackupDiffCount = 0
    #Starting directory lookup 
    Backup-Files -SourceDir $SourceDir -DestDir $("$DestDir\$chainKeyBackupDiffDifferential\Differential_" + $(Get-Date -Format "ddMMyyyy.HHmm")) -HashTable $xmlBackupDiffHashFile|`
    ForEach-Object{ $uintBackupDiffCount++ }
    Write-Output $uintBackupDiffCount
    catch { throw $_ }
    function Backup-Inc
    #region Params
    [CmdletBinding()]
    [OutputType([System.String])]
    param(
    [Parameter(Position=0, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateScript({Test-Path -LiteralPath $_ -PathType 'Container'})] 
    [System.String]
    $SourceDir,
    [Parameter(Position=1, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()] 
    [System.String]
    $DestDir,
    [Parameter(Position=2, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateScript({Test-Path -LiteralPath $_ -PathType 'leaf'})]
    [System.String]
    $HashFile
    #endregion
    try{
    #Loading hash table
    $xmlBackupIncHashFile = Import-Clixml $HashFile
    $chainKeyBackupIncIncremental = $xmlBackupIncHashFile["ChainKey"]
    $uintBackupIncCount = 0
    #Starting directory lookup 
    Backup-Files -SourceDir $SourceDir -DestDir $("$DestDir\$chainKeyBackupIncIncremental\Incremental_" + $(Get-Date -Format "ddMMyyyy.HHmm")) -HashTable $xmlBackupIncHashFile|`
    ForEach-Object{ 
    $xmlBackupIncHashFile[[string]$_.Keys]=[string]$_.Values
    $uintBackupIncCount++
    Write-Host -NoNewline "Saving XML file to $HashFile..."
    Export-Clixml -Path $HashFile -InputObject $xmlBackupIncHashFile -Force
    Write-Host "Done"
    Write-Output $uintBackupIncCount
    catch { throw $_ }
    #0 - is OK. 1 - some error
    $exitValue=0
    process{
    try{
    $filesCopied=0
    $strSourceFolderName = $(Get-Item $SourceDir).Name
    $strHasFile = $("$HashPath\Hash_$strSourceFolderName.xml")
    $strMessage = $($(Get-Date -Format "HH:mm_dd.MM.yyyy;") + "$BackupType backup of $SourceDir started")
    #Automatically switch to full backup
    $bSwitch = $(!$(Test-Path -LiteralPath $strHasFile -PathType "Leaf") -and $SwitchToFull)
    Write-Log -Message $strMessage -LogFile $LogFile
    switch($true){
    $($BackupType -eq "Full" -or $bSwitch) {
    $filesCopied = Backup-Full -SourceDir $SourceDir -DestDir $DestDir -HashFile $strHasFile -ChainKey $("Backup_$strSourceFolderName" + "_" + $(Get-Date -Format "ddMMyyyy"))
    break
    $($BackupType -eq "Incremental") {
    $filesCopied = Backup-Inc -SourceDir $SourceDir -DestDir $DestDir -HashFile $strHasFile 
    break
    $($BackupType -eq "Differential") {
    $filesCopied = Backup-Diff -SourceDir $SourceDir -DestDir $DestDir -HashFile $strHasFile 
    break
    $strMessage = $($(Get-Date -Format "HH:mm_dd.MM.yyyy;") + "$BackupType backup of $SourceDir completed successfully. $filesCopied items were copied.")
    Write-Log -Message $strMessage -LogFile $LogFile
    Write-Output $filesCopied
    catch { 
    $strMessage = $($(Get-Date -Format "HH:mm_dd.MM.yyyy;") + "$BackupType backup of $SourceDir failed:" + $_)
    Write-Log -Message $strMessage -LogFile $LogFile
    $exitValue = 1
    end{exit $exitValue}
    I have some experience writing Powershell scripts,but I am lost at how this script prompts for Source and Destination paths. I tried modifying the Param section, but this didnt work and up until now I thought the only way you could get a prompt was with
    "read-host". Any and all education on this matter would be greatly appreciated. (Side note: I have posted this question  on the forum in which I found it and have not got an answer yet).
    param(
    [Parameter(Position=0, Mandatory=$true,ValueFromPipeline=$true)]
    [ValidateScript({Test-Path -LiteralPath $_ -PathType 'Container'})]
    [System.String]
    $SourceDir,
    [Parameter(Position=1, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateScript({Test-Path -LiteralPath $_ -PathType 'Container'})]
    [System.String]
    $DestDir,
    [Parameter(Position=2, Mandatory=$false,ValueFromPipeline=$false)]
    [ValidateScript({Test-Path -LiteralPath $_ -PathType 'Container'})]
    [System.String]
    $HashPath,
    [Parameter(Position=3, Mandatory=$false,ValueFromPipeline=$false)]
    [ValidateSet("Full","Incremental","Differential")]
    [System.String]
    $BackupType="Full",
    [Parameter(Position=4, Mandatory=$false,ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()]
    [System.String]
    $LogFile=".\Backup-Files.log",
    [Parameter(Position=5, Mandatory=$false,ValueFromPipeline=$false)]
    [System.Management.Automation.SwitchParameter]
    $SwitchToFull
    #endregion
    begin{
    function Write-Log
    #region Params
    [CmdletBinding()]
    [OutputType([System.String])]
    param(
    [Parameter(Position=0, Mandatory=$true,ValueFromPipeline=$true)]
    [ValidateNotNullOrEmpty()]
    [System.String]
    $Message,
    [Parameter(Position=1, Mandatory=$true,ValueFromPipeline=$true)]
    [ValidateNotNullOrEmpty()]
    [System.String]
    $LogFile
    #endregion
    try{
    Write-Host $Message
    Out-File -InputObject $Message -Append $LogFile
    catch {throw $_}
    function Get-Hash
    #region Params
    [CmdletBinding()]
    [OutputType([System.String])]
    param(
    [Parameter(Position=0, Mandatory=$true,ValueFromPipeline=$true)]
    [ValidateNotNullOrEmpty()]
    [System.String]
    $HashTarget,
    [Parameter(Position=1, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateSet("File","String")]
    [System.String]
    $HashType
    #endregion
    begin{
    try{ $objGetHashMD5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider }
    catch {throw $_ }
    process{
    try {
    #Checking hash target is file or just string
    switch($HashType){
    "String" {
    $objGetHashUtf8 = New-Object -TypeName System.Text.UTF8Encoding
    $arrayGetHashHash = $objGetHashMD5.ComputeHash($objGetHashUtf8.GetBytes($HashTarget.ToUpper()))
    break
    "File" {
    $arrayGetHashHash = $objGetHashMD5.ComputeHash([System.IO.File]::ReadAllBytes($HashTarget))
    break
    #Return hash
    Write-Output $([System.Convert]::ToBase64String($arrayGetHashHash))
    catch { throw $_ }
    function Copy-File
    #region Params
    [CmdletBinding()]
    [OutputType([System.String])]
    param(
    [Parameter(Position=0, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateScript({Test-Path -LiteralPath $_ -PathType 'Any'})]
    [System.String]
    $SourceFile,
    [Parameter(Position=1, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()]
    [System.String]
    $DestFile
    #endregion
    try{
    #The script fails when folder being copied to file. So the item will be removed to avoid the error.
    if(Test-Path -LiteralPath $DestFile -PathType Any){
    Remove-Item -LiteralPath $DestFile -Force -Recurse
    #Creating destination if doesn't exist. It's required because Copy-Item doesn't create destination folder
    if(Test-Path -LiteralPath $SourceFile -PathType Leaf){
    New-Item -ItemType "File" -Path $DestFile -Force
    #Copying file to destination directory
    Copy-Item -LiteralPath $SourceFile -Destination $DestFile -Force
    catch{ throw $_ }
    function Backup-Files
    #region Params
    [CmdletBinding()]
    [OutputType([System.String])]
    param(
    [Parameter(Position=0, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateScript({Test-Path -LiteralPath $_ -PathType 'Container'})]
    [System.String]
    $SourceDir,
    [Parameter(Position=1, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()]
    [System.String]
    $DestDir,
    [Parameter(Position=2, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateNotNull()]
    [System.Collections.Hashtable]
    $HashTable
    #endregion
    try{
    $xmlBackupFilesHashFile = $HashTable
    Write-Host "Backup started"
    Get-ChildItem -Recurse -Path $SourceDir|ForEach-Object{
    $currentBackupFilesItem = $_
    #Full path to source and destination item
    $strBackupFilesSourceFullPath = $currentBackupFilesItem.FullName
    $strBackupFilesDestFullPath = $currentBackupFilesItem.FullName.Replace($SourceDir,$DestDir)
    #Checking that the current item is file and not directory. True - the item is file.
    $bBackupFilesFile = $($($currentBackupFilesItem.Attributes -band [System.IO.FileAttributes]::Directory) -ne [System.IO.FileAttributes]::Directory)
    Write-Host -NoNewline ">>>Processing item $strBackupFilesSourceFullPath..."
    #Generating path hash
    $hashBackupFilesPath = $(Get-Hash -HashTarget $strBackupFilesSourceFullPath -HashType "String")
    $hashBackupFilesFile = "d"
    #If the item is file then generate hash for file content
    if($bBackupFilesFile){
    $hashBackupFilesFile = $(Get-Hash -HashTarget $strBackupFilesSourceFullPath -HashType "File")
    #Checking that the file has been copied
    if($xmlBackupFilesHashFile[$hashBackupFilesPath] -ne $hashBackupFilesFile){
    Write-Host -NoNewline $("hash changed=>$hashBackupFilesFile...")
    Copy-File -SourceFile $strBackupFilesSourceFullPath $strBackupFilesDestFullPath|Out-Null
    #Returning result
    Write-Output @{$hashBackupFilesPath=$hashBackupFilesFile}
    else{
    Write-Host -NoNewline "not changed..."
    Write-Host "done"
    Write-Host "Backup completed"
    catch { throw $_ }
    function Backup-Full
    [CmdletBinding()]
    [OutputType([System.String])]
    #region Params
    param(
    [Parameter(Position=0, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateScript({Test-Path -LiteralPath $_ -PathType 'Container'})]
    [System.String]
    $SourceDir,
    [Parameter(Position=1, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()]
    [System.String]
    $DestDir,
    [Parameter(Position=2, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()]
    [System.String]
    $HashFile,
    [Parameter(Position=3, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()]
    [System.String]
    $ChainKey
    #endregion
    try{
    #Creating an empty hash table
    $xmlBackupFullHashFile = @{}
    #Starting directory lookup
    $uintBackupFullCount = 0
    Backup-Files -SourceDir $SourceDir -DestDir $("$DestDir\$ChainKey\Full_" + $(Get-Date -Format "ddMMyyyy")) -HashTable $xmlBackupFullHashFile|`
    ForEach-Object{
    $xmlBackupFullHashFile.Add([string]$_.Keys,[string]$_.Values)
    $uintBackupFullCount++
    #Saving chain key.
    $xmlBackupFullHashFile.Add("ChainKey",$ChainKey)
    Write-Host -NoNewline "Saving XML file to $HashFile..."
    Export-Clixml -Path $HashFile -InputObject $xmlBackupFullHashFile -Force
    Write-Host "done"
    Write-Output $uintBackupFullCount
    catch { throw $_ }
    function Backup-Diff
    #region Params
    [CmdletBinding()]
    [OutputType([System.String])]
    param(
    [Parameter(Position=0, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateScript({Test-Path -LiteralPath $_ -PathType 'Container'})]
    [System.String]
    $SourceDir,
    [Parameter(Position=1, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()]
    [System.String]
    $DestDir,
    [Parameter(Position=2, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateScript({Test-Path -LiteralPath $_ -PathType 'leaf'})]
    [System.String]
    $HashFile
    #endregion
    try{
    #Loading hash table
    $xmlBackupDiffHashFile = Import-Clixml $HashFile
    $chainKeyBackupDiffDifferential = $xmlBackupDiffHashFile["ChainKey"]
    $uintBackupDiffCount = 0
    #Starting directory lookup
    Backup-Files -SourceDir $SourceDir -DestDir $("$DestDir\$chainKeyBackupDiffDifferential\Differential_" + $(Get-Date -Format "ddMMyyyy.HHmm")) -HashTable $xmlBackupDiffHashFile|`
    ForEach-Object{ $uintBackupDiffCount++ }
    Write-Output $uintBackupDiffCount
    catch { throw $_ }
    function Backup-Inc
    #region Params
    [CmdletBinding()]
    [OutputType([System.String])]
    param(
    [Parameter(Position=0, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateScript({Test-Path -LiteralPath $_ -PathType 'Container'})]
    [System.String]
    $SourceDir,
    [Parameter(Position=1, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()]
    [System.String]
    $DestDir,
    [Parameter(Position=2, Mandatory=$true,ValueFromPipeline=$false)]
    [ValidateScript({Test-Path -LiteralPath $_ -PathType 'leaf'})]
    [System.String]
    $HashFile
    #endregion
    try{
    #Loading hash table
    $xmlBackupIncHashFile = Import-Clixml $HashFile
    $chainKeyBackupIncIncremental = $xmlBackupIncHashFile["ChainKey"]
    $uintBackupIncCount = 0
    #Starting directory lookup
    Backup-Files -SourceDir $SourceDir -DestDir $("$DestDir\$chainKeyBackupIncIncremental\Incremental_" + $(Get-Date -Format "ddMMyyyy.HHmm")) -HashTable $xmlBackupIncHashFile|`
    ForEach-Object{
    $xmlBackupIncHashFile[[string]$_.Keys]=[string]$_.Values
    $uintBackupIncCount++
    Write-Host -NoNewline "Saving XML file to $HashFile..."
    Export-Clixml -Path $HashFile -InputObject $xmlBackupIncHashFile -Force
    Write-Host "Done"
    Write-Output $uintBackupIncCount
    catch { throw $_ }
    #0 - is OK. 1 - some error
    $exitValue=0
    process{
    try{
    $filesCopied=0
    $strSourceFolderName = $(Get-Item $SourceDir).Name
    $strHasFile = $("$HashPath\Hash_$strSourceFolderName.xml")
    $strMessage = $($(Get-Date -Format "HH:mm_dd.MM.yyyy;") + "$BackupType backup of $SourceDir started")
    #Automatically switch to full backup
    $bSwitch = $(!$(Test-Path -LiteralPath $strHasFile -PathType "Leaf") -and $SwitchToFull)
    Write-Log -Message $strMessage -LogFile $LogFile
    switch($true){
    $($BackupType -eq "Full" -or $bSwitch) {
    $filesCopied = Backup-Full -SourceDir $SourceDir -DestDir $DestDir -HashFile $strHasFile -ChainKey $("Backup_$strSourceFolderName" + "_" + $(Get-Date -Format "ddMMyyyy"))
    break
    $($BackupType -eq "Incremental") {
    $filesCopied = Backup-Inc -SourceDir $SourceDir -DestDir $DestDir -HashFile $strHasFile
    break
    $($BackupType -eq "Differential") {
    $filesCopied = Backup-Diff -SourceDir $SourceDir -DestDir $DestDir -HashFile $strHasFile
    break
    $strMessage = $($(Get-Date -Format "HH:mm_dd.MM.yyyy;") + "$BackupType backup of $SourceDir completed successfully. $filesCopied items were copied.")
    Write-Log -Message $strMessage -LogFile $LogFile
    Write-Output $filesCopied
    catch {
    $strMessage = $($(Get-Date -Format "HH:mm_dd.MM.yyyy;") + "$BackupType backup of $SourceDir failed:" + $_)
    Write-Log -Message $strMessage -LogFile $LogFile
    $exitValue = 1
    end{exit $exitValue}

    Hi Ryan Blaeholder,
    Thanks for your posting.
    To schedule a powershell script with input value, instead of modifying the script above, you can also try to add the input during creating a scheduled task like this:(save the script above as D:\backup.ps1)
    -command "& 'D:\backup.ps1' 'input1' 'input2'"
    For more detailed information, please refer to this article to complete:
    Schedule PowerShell Scripts that Require Input Values:
    http://blogs.technet.com/b/heyscriptingguy/archive/2011/01/12/schedule-powershell-scripts-that-require-input-values.aspx
    I hope this helps.
    We
    are trying to better understand customer views on social support experience, so your participation in this
    interview project would be greatly appreciated if you have time.
    Thanks for helping make community forums a great place.

  • The PowerShell script failed with below exception

    I'm receiving the following errors on all SQL Express Servers (every machine that has SQL Express inside).
    it seems that the discovery has found SQL Express but could not connect to the instance.
    details on the alerts:
    Date and Time:
    10/22/2013 12:04:22 PM
    Log Name:
    Operations Manager
    Source:
    Health Service Modules
    Generating Rule:
    Collect Power Shell Module Events
    Event Number:
    22406
    Level:
     Error
    Logging Computer:
    SQLEXPRESS.DOMAIN.COM
    User:
    N/A
    Description:
    The PowerShell script failed with below exception
    System.Management.Automation.RuntimeException: Exception calling "Fill" with "1" argument(s): "A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not
    accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)"
    At line:44 char:19
    + $SqlAdapter.Fill <<<< ($DataSet)|out-null
    at System.Management.Automation.FlowControlNode.Execute(Array input, Pipe outputPipe, ExecutionContext context)
    at System.Management.Automation.ParseTreeNode.Execute(Array input, Pipe outputPipe, ArrayList& resultList, ExecutionContext context)
    at System.Management.Automation.StatementListNode.ExecuteStatement(ParseTreeNode statement, Array input, Pipe outputPipe, ArrayList& resultList, ExecutionContext context)
    Script Name: StolenServerMemory2008.ps1
    One or more workflows were affected by this.
    Workflow name: Microsoft.SQLServer.2008.DBEngine.StolenServerMemoryMonitor
    Instance name: SQLEXPRESS
    Instance ID: {9705795C-4F3B-C2EF-AA7D-C736B40FD6A4}
    Management group: SCOMGROUP 

    Some additional inf.
    http://stackoverflow.com/questions/6466974/unable-to-connect-to-sql-express-error-26-error-locating-server-instance-speci?rq=1
    anyway you can disable this rule/monitor as no control from monitoring solution in that case. Or try to rewrite the same monitor...
    The problem in your case is when function tries to get Max Server Memory MB by connecting to master DB, but you can replace it with performance counter like Target Server Memory (KB)...
    just see the function main in StolenServerMemory2008.ps1 and what you need to replace
    $api = New-Object -comObject "MOM.ScriptAPI"
    $bag = $api.CreatePropertyBag()
    $msg = [Environment]::NewLine
    $err = [Environment]::NewLine
    #try {
    $maxMemoryMB = GetMaxServerMemoryMB $ComputerName $InstanceName
    $stolenPages = (Get-Counter ("\" + $PerformanceCounterObject + ":Buffer Manager\Stolen Pages")).CounterSamples[0].CookedValue
    $pakeSizeKB = 8
    [double]$stolenMemoryMB = $stolenPages * $pakeSizeKB / 1024                                      
    [double]$stolenMemoryPercent = 0
    if($maxMemoryMB -gt 0){
    [double]$stolenMemoryPercent= 100.0 * $stolenMemoryMB / $maxMemoryMB
    $bag.AddValue("StolenMemoryMB", $stolenMemoryMB)
    $bag.AddValue("StolenMemoryPercent", $stolenMemoryPercent)                                  
    $msg += "StolenMemoryMB=$stolenMemoryMB StolenMemoryPercent=$stolenMemoryPercent"
    $msg += [Environment]::NewLine                          
    #debug $api.LogScriptEvent("SQL 2008 Stolen Server Memory data source", $SCRIPT_EVENT_ID, $INFORMATION_EVENT_TYPE, $msg + $err)                     
    #catch {
    #             $header = "Managegement Group: $Target/ManagementGroup/Name$. Script: {0}" -f ($MyInvocation.MyCommand).Name.ToString()
    #             $msg += "Error occured during SQL 2008 Stolen Server Memory data source executing.{0}Computer:{1} {0}Reason: {2}" -f [Environment]::NewLine, $env:COMPUTERNAME, $_.Exception.Message
    #             $api.LogScriptEvent($header, $SCRIPT_EVENT_ID, $ERROR_EVENT_TYPE, $msg + $err)                           
    $bag

  • Client not installing during OSD - error code 80041002

    Hi All,
    I have an issue using SCCM 2012r2 with CU1 where the agent is not installing as part of the OSD step 'Setup Windows and ConfigMgr'. The error being returned is 1603 and with a bit more digging this appears to be this error
    Product: Configuration Manager Client -- Error 25150. Setup was unable to register the CCM_Service_HostingConfiguration endpoint
    The error code is 80041002
    followed by
    Error 25150. Setup was unable to register the CCM_Service_HostingConfiguration endpoint
    The error code is 80041002
    Having looked at some of the forums this appears to be a known issue which has a hotfix available if you are installing the client on a server hosting a ConfigMgr Management Point. However the issue I have is on a client PC during OSD.
    Originally I was installing the CU1 update using the PATCH= property in the installation properties and as part of my troubleshooting I have removed this leaving only the SMSCACHESIZE, SMSMP and FSP properties in the OSD step. This was working last week
    and I can see no reason why there would be any issues with this.
    Any help would be greatly appreciated as this is driving me crazy!

    @Nash The Setup Windows and ConfigMgr step contains the following:
    SMSCACHESIZE=20480 SMSMP=mpsiteserver.domain.local FSP=fspsiteserver.domain.local
    @Jason The errors are in clienmt.msi.log the end of the log looks like this:
    MSI (s) (F0:2C) [13:33:12:918]: Note: 1: 1729
    MSI (s) (F0:2C) [13:33:12:918]: Product: Configuration Manager Client -- Configuration failed.
    MSI (s) (F0:2C) [13:33:12:918]: Windows Installer reconfigured the product. Product Name: Configuration Manager Client. Product Version: 5.00.7958.1000. Product Language: 1033. Manufacturer: Microsoft Corporation. Reconfiguration success or error status: 1603.
    MSI (s) (F0:2C) [13:33:12:918]: Deferring clean up of packages/files, if any exist
    MSI (s) (F0:2C) [13:33:12:918]: MainEngineThread is returning 1603
    MSI (s) (F0:FC) [13:33:12:918]: RESTART MANAGER: Session closed.
    MSI (s) (F0:FC) [13:33:12:918]: No System Restore sequence number for this installation.
    === Logging stopped: 26/08/2014  13:33:12 ===
    While the section that contains the error 25150 looks like this:
    [13:33:12] Registering Hosting Configuration.
    MSI (s) (F0!A4) [13:33:12:638]: Closing MSIHANDLE (18847) of type 790531 for thread 2980
    [13:33:12] @@ERR:25150
    MSI (s) (F0!A4) [13:33:12:638]: Product: Configuration Manager Client -- Error 25150. Setup was unable to register the CCM_Service_HostingConfiguration endpoint
    The error code is 80041002
    MSI (s) (F0!A4) [13:33:12:638]: Closing MSIHANDLE (18845) of type 790531 for thread 2980
    Error 25150. Setup was unable to register the CCM_Service_HostingConfiguration endpoint
    The error code is 80041002
    MSI (s) (F0:C8) [13:33:12:638]: Closing MSIHANDLE (18843) of type 790536 for thread 1836
    CustomAction CcmRegisterHostingConfiguration returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)
    MSI (s) (F0:2C) [13:33:12:638]: User policy value 'DisableRollback' is 0
    MSI (s) (F0:2C) [13:33:12:638]: Machine policy value 'DisableRollback' is 0
    Action ended 13:33:12: InstallFinalize. Return value 3.

  • Pre-provision bitlocker during OSD with a Windows 7 Enterprise image fails at Enable Bitlocker - SCCM 2012 SP1 beta

    I'm trying the SP1 feature to pre-provision bitlocker during OSD, using an MDT integrated task sequence.  It seems like the pre-provision part is working, but when the task sequence tries to enable bitlocker after installing the
    OS, it fails.  ZTIBDE.log contains the following:
    Property UDI is now = ZTIBde 11/14/2012 5:04:42 PM 0 (0x0000)
    Microsoft Deployment Toolkit version: 6.1.2373.0 ZTIBde 11/14/2012 5:04:42 PM 0 (0x0000)
    The task sequencer log is located at C:\WINDOWS\CCM\Logs\SMSTSLog\SMSTS.LOG. For task sequence failures, please consult this log. ZTIBde 11/14/2012 5:04:42 PM 0 (0x0000)
    System drive is: C: ZTIBde 11/14/2012 5:04:42 PM 0 (0x0000)
    The deployment method is using ConfigMgr. ZTIBde 11/14/2012 5:04:42 PM 0 (0x0000)
    Property BdeInstallSuppress is now = NO ZTIBde 11/14/2012 5:04:42 PM 0 (0x0000)
    This script is not currently running in Windows PE ZTIBde 11/14/2012 5:04:42 PM 0 (0x0000)
    We are running a OS that supports BitLocker ZTIBde 11/14/2012 5:04:42 PM 0 (0x0000)
    OSDBitLockerTargetDrive= , OSDBdeTargetDriveLetter= , sOSDBitLockerTargetDrive= C: ZTIBde 11/14/2012 5:04:42 PM 0 (0x0000)
    This is a Refresh Build where BDE protectors were disabled. ZTIBde 11/14/2012 5:04:42 PM 0 (0x0000)
    OS Version is Windows 7 or higher. ZTIBde 11/14/2012 5:04:42 PM 0 (0x0000)
    Encryptable Volume Count:1 ZTIBde 11/14/2012 5:04:42 PM 0 (0x0000)
    Attempting to bind to: C: ZTIBde 11/14/2012 5:04:42 PM 0 (0x0000)
    Success setting oBdeVol ZTIBde 11/14/2012 5:04:42 PM 0 (0x0000)
    BDE Instance Bind Complete ZTIBde 11/14/2012 5:04:42 PM 0 (0x0000)
    Attempting to enable BDE Protectors ZTIBde 11/14/2012 5:04:42 PM 0 (0x0000)
    FAILURE ( 6767 ): -2144272377 0x80310007: Enable BDE Protectors ZTIBde 11/14/2012 5:04:42 PM 0 (0x0000)
    This laptop is in an OU with bitlocker related settings applied via GPO, including allowing enhanced PINs, requiring backup of the recovery passwords and key packages to AD, and to require TPM+PIN for the startup authentication.  
    Bitlocker provisioning is working on my production server using only MDT (No SCCM), with a task sequence deploying Windows 7.  I copied some of the variables from the customsettings.ini over to a collection variable in SCCM for
    the collection I'm testing deployment to. Putting those same variables in collection variables should work the same as if they were in the custom settings, but only for members of that collection, right?
    The variables set in the collection variables area are
    BDEInstall - TPMPIN
    BDEInstallSuppress - NO
    BDEPin - SET
    BDERecoveryKey - AD
    BDERecoveryPassword - TRUE
    TPMOwnerPassword - SET
    OSDBitlockerMode - TPMPin (This one wasn't copied from the other MDT share, but added just for sccm. 
    I didn't copy the BDEWaitforEncryption variable, it didn't seem like that one would be necessary with the pre-provisioning.   What am I doing wrong here?

    If not you could add a set variable action to your task sequence after the UDI wizard to set OSDBitLockerPIN to %BDEPin%. You could add a condition to the action to only run if BDEPin exists.
    I don´t quite fallow, how I can switch these variables between. I admit I some time have difficulties to understand the variables. Could you mark discribe me the settings of set variable step I have to enter. Thanks!
    With Confmgr step Enable Bitlocker I have another issue - it does not allow to to enter pin code with letters.
    No problem :-). There is a task sequence action called "set task sequence variable". Just add one of these actions to the task sequence after the UDI wizard. There are only two things you have to configure in the action, the variable you want to set
    and the value you want to set that variable to. The UDI wizard will create the variable BDEPin with a value equal to the PIN you enter in the UDI wizard page. So in your "set task sequence variable" action enter the variable name as OSDBitlockerPIN
    and the value as %BDEPin%. This action will then create the OSDBitlockerPIN variable with the value that was stored in BDEPin by the UDI wizard. The built in SCCM action will then use this as the PIN rather than whatever value is configured in the task sequence
    editor.
    However the best solution would probably be to get the UDI wizard to set OSDBitlockerPIN rather than BDEPin in the first place. I think you can do this in the UDI wizard editor or directly in the XML. I don't use the editor these days so can't recall offhand.
    I will take a look at this next week.
    Most of the task sequence actions support variables and it enables you to configure the action dynamically at runtime. For example the same sequence can be used to deploy systems into different domains, languages, applications etc. all by setting variables.
    It's the basis of how the UDI wizard works, it just sets variables which are then consumed by either MDT scripts or task sequence actions. The variables can be configured by UDI, collections, MDT customsettings.ini, MDT database or scripts. Dynamic deployment
    is definitely the way to go :-).
    I think you are correct about the built-in action not supporting enhanced PIN. I think it only supports standard numeric PIN. Whether setting the PIN via the variable works around a restriction in the task sequence editor I am not sure, I suspect not.
    Mark.

  • Deploy powershell script - Uninstall Forefront

    Hi
    Im trying to build a powershell script that uninstall Forefront Client and later install SCEP and it also copy the local exclusions from Forefront to insert in SCEP (registry).
    All works fine when Im running the script locally, but when Im deploying it from Altiris DS it halts on Microsoft Forefront Client Security Antimalware Service". Every time, I also have tried to sort them differently but it wont work.
    All I see in the event viewer is a warning:
    "Application 'C:\Program Files\Microsoft Forefront\Client Security\Client\Antimalware\MSASCui.exe' (pid 1964) cannot be restarted - Application SID does not match Conductor SID.."
    And then later an error:
    HRESULT:0x80070643
    Description:Cannot complete the System Center Endpoint Protection installation. An error has prevented the System Center Endpoint Protection setup wizard from completing successfully. Please restart your computer and try again. Error code:0x80070643. Fatal
    error during installation.
    This is the deployment from Altiris:
    powershell.exe -noexit "& 'C:\Temp\ForefrontSCEP.ps1'"
    Does anyone has any clue?
    Cheers!
    **** The script ****
    # Backup Forefront registry data
    Reg export "HKLM\SOFTWARE\Microsoft\Microsoft Forefront" C:\Temp\SCEPClient_New\exclbackup.reg
    # Create new registry item
    new-Item "HKLM:\SOFTWARE\Microsoft\" -Name "Microsoft Antimalware"
    new-Item "HKLM:\SOFTWARE\Microsoft\Microsoft Antimalware\" -Name Exclusions
    # Copy Forefront registry exclusion data to newly created regkey
    Copy-Item "HKLM:\SOFTWARE\Microsoft\Microsoft Forefront\Client Security\1.0\AM\Exclusions" -Destination "HKLM:\SOFTWARE\Microsoft\Microsoft Antimalware\" -Recurs
    # "Uninstall Forefront och MOM"
    # "Uninstall Microsoft MOM"
    $app = Get-WmiObject -Class Win32_Product | Where-Object {
        $_.Name -match "Microsoft Operations Manager 2005 Agent"
    $app.Uninstall()
    # "Uninstall Forefront Assessment"
    $app = Get-WmiObject -Class Win32_Product | Where-Object {
        $_.Name -match "Microsoft Forefront Client Security State Assessment Service"
    $app.Uninstall()
    # "Uninstall Forefront Antimalware"
    $app = Get-WmiObject -Class Win32_Product | Where-Object {
        $_.Name -match "Microsoft Forefront Client Security Antimalware Service"
    $app.Uninstall()
    # Install SCEP with policy
    Start-Process -FilePath C:\Temp\SCEPClient_New\scepinstall.exe -ArgumentList "/s /q /policy C:\Temp\SCEPClient_New\ServerSCEP.xml" -ErrorAction SilentlyContinue

    I finally solved, in two ways.
    For the powershell part:
    I changed the name match against a filter function. So now I can deploy the powershell script just fine.
    $app = Get-WmiObject -Class Win32_Product | Where-Object {
        $_.Name -match "Microsoft Operations Manager 2005 Agent"
    $application = Get-WMIObject Win32_Product -filter "Name='Microsoft Operations Manager 2005 Agent'"
    2nd solution:
    I also created a batch file which worked at my first try. Gotta love the old fashion way :)
    I post it here as well, maybe somebody can get use of it.
    Uninstall Forefront - Install SCEP - Copy local exclusions
    REM Backup Forefront exclusions
    regedit /e C:\Temp\ForefrontExclBackup.reg "HKLM\Software\Microsoft\Microsoft Forefront"
    REM Create SCEP registry keys
    reg add "HKLM\Software\Microsoft\Microsoft Antimalware"
    REM Create SCEP registry keys
    reg add "HKLM\Software\Microsoft\Microsoft Antimalware\Exclusions"
    REM Copy Foreront exclusions to SCEP
    reg copy "HKLM\Software\Microsoft\Microsoft Forefront\Client Security\1.0\AM\Exclusions" "HKLM\Software\Microsoft\Microsoft Antimalware\Exclusions" /s /f
    REM Uninstall Microsoft Forefront Client Security State Assessment Service
    MsiExec.exe /X{E8B56B39-A826-11DB-8C83-0011430C73A4} /qn
    REM Uninstall Microsoft Forefront Client Security Antimalware Service
    MsiExec.exe /X{436028CD-6476-4224-9274-8F0320F30FD1} /qn
    REM Uninstall Microsoft Operations Manager 2005 Agent
    MsiExec.exe /X{F692770D-0E27-4D3F-8386-F04C6F434040} /qn
    REM Install SCEP and policys
    C:\Temp\SCEPInstall.exe /policy C:\Temp\ServerSCEP.xml /s

  • SQL Server upgradation Issue : 2012 to 2014. A job step received an error at line 1 in a PowerShell script. The corresponding line is 'set-executionpolicy RemoteSigned -scope process -Force'. Correct the script and reschedule the job.

    Message
    Executed as user: CORPTST\XXXXX. A job step received an error at line 1 in a PowerShell script. The corresponding line is 'set-executionpolicy RemoteSigned -scope process -Force'. Correct the script and reschedule the job. The error information returned
    by PowerShell is: 'Security error.  '.  Process Exit Code -1.  The step failed.
    I receive this error during the sql server job 'syspolicy_purge_history' execution  when sql server got upgraded form SQL Server 2008 to 2014.

    Hi Vishnu,
    According to the error message, it also occurs in SQL Server 2012.  Here is a feedback about the error in the link below.
    https://connect.microsoft.com/SQLServer/feedback/details/754063/sql-server-2012-syspolicy-purge-history-job-step-3-fails-with-security-error
    To resolve this issue, please change the value of the following registry key from ‘RemoteSigned’ to ‘Unrestricted’. For more details, you can review this similar
    blog.
    HKLM\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.SqlServer.Management.PowerShell.sqlps120\ExecutionPolicy
    Thanks,
    Lydia Zhang

  • Client install fails during OSD

    Hi,
    OS Deployment usually works without any issues for us. Sometimes (like 1 out of 15 deployments) the SCCM client will not install correctly and the system will boot up without any applications. That's okay, we just restart it and it works on the second attempt.
    Lately however, I discovered an issue with a certain model (Lenovo R500): The SCCM client configuration now fails every time (tried four times in a row!). It wasn't that bad before...
    Here are some answers to questions some of you might probably consider asking. :)
    - We are using diskpart /clean at the start of every task sequence
    - The system is domain joined before the SCCM client install step
    - Jason Sandys ConfigMgrStartup Script (client health GPO) is active
    - Client push install is active
    - The BIOS is up to date
    - These are our setup parameters during OSD: SMSMP=*FQDN* CCMEVALHOUR=12 PATCH="\\*FQDN*\hotfixes\configmgr2012ac-r2-kb3026739-x64.msp"
    - I tried installing newer network card drivers during the OSD in case the old drivers suddenly can't handle it any more but that also didn't improve the situation
    I thought maybe the GPO or the client push are interfering with the setup while running the OSD, but that also happens if the GPO is disabled. Also, the client push install never interfered with the OSD before and I don't think that it suddenly would.
    I zipped and uploaded the ccmsetup.log and client.msi.log to OneDrive, I would really appreciate it if someone could take a look at the logfiles and identify any potential issue that I'm not seeing.
    Logfiles: http://1drv.ms/18FTcAH
    Thank you!

    I just found a solution thanks to another fellow forum member that suggested I make sure that "Client Push" was not enabled.  I too was experiencing intermittent failures in OSD at the "Setup Windows and ConfigMgr" step that did
    not make any sense.
    After a review of the ccmsetup logs on the OSD machine and ccm.log on the server I was able to see that "Client Push" was beating the TS to installing the client by 4 seconds causing the TS to fail.
    Torsten indicated that Client Push and OSD can be problematic.  
    OSD Client Patch fails intermittently 
    After reviewing your ccmsetup.log I see the same evidence at time stamp 11:40:50 that I saw in my logs indicating that ccmsetup was already running when the TS went to install the client.
    An instance of ccmsetup is running as a service. The current instance will be terminated. ccmsetup 2/26/2015 11:40:50 AM 1920 (0x0780)
    Installation will be cancelled due to shutdown. Windows Installer will return error code 1602. ccmsetup 2/26/2015 11:40:50 AM 1920 (0x0780)
    MSI: Aktion 11:40:50: Rollback. Aktion wird rückgängig gemacht: ccmsetup 2/26/2015 11:40:50 AM 1920 (0x0780)
    An instance of ccmsetup is running as a service. The current instance will be terminated. ccmsetup 2/26/2015 11:40:50 AM 1920 (0x0780)
    Installation will be cancelled due to shutdown. Windows Installer will return error code 1602. ccmsetup 2/26/2015 11:40:50 AM 1920 (0x0780)
    File C:\WINDOWS\ccmsetup\{181D79D7-1115-4D96-8E9B-5833DF92FBB4}\client.msi installation was cancelled (1602) ccmsetup 2/26/2015 11:41:00 AM 1920 (0x0780)
    Hi pfitchie,
    I unmarked my reply as answer, it happened again and after reading your thread and this reply it all makes sense. I now disabled the Clientpush and will see what happens. Is there a possibility this is only happening if you apply CU4 during the OSD? It never
    happened before.

  • GPUpdate during OSD

    Ok so it's my understanding that during OSD GPUpdate is blocked and will not run... I have seen several 'solution' although none of them actually end up running GPUpdate during the TS. I really need to be able to do this as if the policy doesn't come down
    I don't get connected to our Wi-Fi.
    My question is... What is Blocking GPUpdates? is it something like 'provisioning mode' that I can disabled via script (a service?) or regkey temporarily and then re-enable it at the end of a GPUpdate TS step?
    There is always a working solution... whatever must be done.

    Ok well supported or no it seems my hunch payed off.
    As my third last step of my task sequence I disable provisioning mode:
    reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\CcmExec " /v ProvisioningMode /t REG_SZ /d false /f
    Then as my second last step I am able to run gpupdate to get my wifi cert:
    cmd.exe /c gpupdate /target:computer /force
    Then as my last step I am able to run a script to connect to the wifi and wipe the imaging dock mac address and trigger a hardware inventory action:
    http://blogs.technet.com/b/askpfeplat/archive/2014/07/28/how-to-use-the-same-external-ethernet-adapter-for-multiple-sccm-osd.aspx
    So far I have only been pleased with the success... no issue with this to report so far but for anyone else traveling down this path, be wary as Group policy can interfere with your imaging process so disabling provisioning mode to soon in the task sequence
    could be a real issue.

  • Partitioning the Harddisk during OSD

    Hi,
    I have a requirement to partition disks during OSD. I have used step Partition Disk 0 to create a single drive.
    Below are scenarios I would like advice on.
    1. Creating C:\ 200GB & D:\ 300GB from a single disk of 500GB
    2. D:\ if existing should not be formatted.

    Hi,
    Please check Peter's reply in the thread below.
    "If you want to keep the data on D partition you can't re-format the drive to different partition sizes, but you can choose to keep the partitions as-is and don't use a format step at all. In that case the task sequence will wipe the C partition and leave
    the D partition.
    Another option could be to use a custom diskpart script to re-format only the C partition. Just keep in mind that if you want to re-format both partitions, you need to first take the data of. So that's your last option. Use USMT and a SMP to capture the
    data and after re-formatting the drive and installing the OS restore the data again."
    Manual formatted for C: and D: drive Via SCCM
    2012  task sequence 
    Best Regards,
    Joyce
    Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Subscriber Support, contact [email protected]

Maybe you are looking for

  • Custom Script using Classifications

    Hi. I am wondering if it is possible and how I would go about using custom scripts to use classifications to display particular things. This is the goal: To classify events (back end) and then based on the classification of an event, on the detail pa

  • Windows vista locked in Shutdown mode loop.

    After FF latest update when I put my Dell Laptop with Windows Vista as the Operating System, it failed to shut down and seems to be locked in the shutdown mode. It will not respond to "Ctrl, Alt, Del), any key stroke and has a full battery. I have le

  • How do I find iOS setup assistant on my iPad

    How do I find iOS setup assistant on my iPad?

  • Menus appearing underneath other components

    I am having a problem making my menus appear on top when they 'pop up'. I know this is a problem with mixing heavyweight and lightweight components, and I have been trying to force the menus to be heavyweight but to no avail. I have been trying to se

  • Lost iPhone 4, the phone is switch off, is it possible to get all data back in somehow?

    I have someone stolen my iPhone 4 last night, I tried to use (find my iPhone) app to track where is it, but the thief just switch off the handset, can anyone help with this case? I have passcode for that phone, I don't think he can access the phone a