Instalando o Powershell 3.0 ou 4.0 em máquinas com Windows 7 através da Diretiva de Grupo ou do SCCM

2

Estou tentando atualizar todas as máquinas com Windows 7 que temos em uma de nossas unidades organizacionais no Active Directory com o Powershell 3.0 ou 4.0. Eu gostaria de usar a Política de Grupo ou o SCCM 2012 e gostaria que ela fosse enviada ao contrário do opcional para download e instalação dos usuários. Um problema que encontrei é o requisito .Net. Existe uma maneira de empacotar o instalador para que ele instale a estrutura .Net necessária, se ela ainda não estiver instalada?

    
por Ian 26.11.2013 / 14:30

2 respostas

3

O que você pode fazer no SCCM 2012 é usar aplicativos em vez de pacotes.

Em sua instância, primeiro crie o aplicativo .NET Framework e crie o aplicativo Powershell. Ao criar o aplicativo PowerShell, defina uma dependência do aplicativo que você criou chamado .NET Framework com a instalação automática marcada.

Quando você implanta o aplicativo PowerShell, ele verifica se a estação de trabalho tem o .NET Framework instalado. Se estiver instalado, ele irá instalar o PowerShell; se não for, instalará o .NET Framework primeiro.

NOTA: Certifique-se de definir o Método de Detecção para o aplicativo .NET (e o PowerShell) para que ele saiba como verificar se está instalado.

Eu uso isso para o .NET 4:

Tipo de configuração: registro Colmeia: HKLM Chave: SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \ v4 \ completo Valor: inteiro "Esta configuração do registro deve existir no sistema de destino para indicar a presença deste aplicativo" está marcada.

Quanto ao envio para o cliente, verifique se o método de implantação está definido como Obrigatório, NÃO disponível.

    
por 28.11.2013 / 01:34
1

Eu não estou usando nenhum desses para instalar o PowerShell 4, mas criei um script para fazer isso. Você pode ter a ideia e usar pedaços que se aplicam ao seu ambiente.

    REM Script to upgrade to .net 4.5 & Windows Management Framework 4 (incl. Powershell 4) on Win7 SP1

SETLOCAL ENABLEEXTENSIONS

SET SOURCE=Install_PowerShell4
SET DESTINATION=\myserver\logs\Inventory\OnDemand\WMF4
SET exeDOTNET45="\myserver\Packages\Microsoft Dot Net.5\dotnetfx45_full_x86_x64.exe" /quiet /norestart
SET exeWMFx64=\myserver\Packages\WMF4\Windows6.1-KB2819745-x64-MultiPkg.msu /quiet /norestart
SET exeWMFx32=\myserver\Packages\WMF4\Windows6.1-KB2819745-x86-MultiPkg.msu /quiet /norestart


REM Set Exclusions
REG QUERY HKLM\SOFTWARE\EUDE /V DoNotUpgradeToDotNet45
IF %ERRORLEVEL% EQU 0 GOTO :TAG_EXCEPTION_NET45

REG QUERY HKLM\SOFTWARE\EUDE /V DoNotUpgradeToPowerShell4
IF %ERRORLEVEL% EQU 0 GOTO :TAG_EXCEPTION_PS4

:CONTINUE

:CHECK_FailED
REM If failed before, do not retry.
IF EXIST "%DESTINATION%\Fail_DotNet_%COMPUTERNAME%.txt" GOTO :END
IF EXIST "%DESTINATION%\%COMPUTERNAME%_Has_PowerShell4.txt" GOTO :END
IF EXIST "%DESTINATION%\Success_PowerShell4_%COMPUTERNAME%.txt" GOTO :END

:Check_For_DotNet4.5
REG QUERY "hklm\software\microsoft\net framework setup\ndp\v4\Full" /v Release
If %ERRORLEVEL% EQU 0 GOTO :Has_DotNet45
REM Does not have .net 4.5, need remediation

:Install_DotNet4.5
REM http://msdn.microsoft.com/en-us/library/ee390831.aspx for return codes
cmd /c %exeDOTNET45%
If %ERRORLEVEL% EQU 0 GOTO :DOTNET45_SUCCESS
If %ERRORLEVEL% EQU 1640 GOTO :DOTNET45_SUCCESS
If %ERRORLEVEL% EQU 3010 GOTO :DOTNET45_SUCCESS
REM GOTO :DOTNET45_Fail


:DOTNET45_Fail
    IF NOT EXIST "%DESTINATION%\Fail_DotNet45_%COMPUTERNAME%.txt" ECHO. >"%DESTINATION%\Fail_DotNet45_%COMPUTERNAME%.txt"
GOTO :END


:DOTNET45_SUCCESS
    IF NOT EXIST "%DESTINATION%\Success_DotNet45_%COMPUTERNAME%.txt" ECHO. >"%DESTINATION%\Success_DotNet45_%COMPUTERNAME%.txt"
GOTO :Check_For_PowerShell4


:Has_DotNet45
REM IF NOT EXIST "%DESTINATION%\%COMPUTERNAME%_HasDotNet45.txt" ECHO. >"%DESTINATION%\%COMPUTERNAME%_HasDotNet45.txt"
REM GOTO :Check_For_PowerShell4

:Check_For_PowerShell4
REG QUERY hklm\software\microsoft\powershell\PowerShellEngine /v PowerShellVersion |findstr "4"
  IF %ERRORLEVEL% EQU 0 GOTO :Has_PowerShell4
REM Check if we have installed it but waiting for reboot
  IF EXIST "%DESTINATION%\SuccessPendingReboot_PowerShell4_%COMPUTERNAME%.txt" GOTO :END

:Check_Architecture
if /i "%processor_architecture%"=="x86" (
    IF NOT DEFINED PROCESSOR_ARCHITEW6432 ( 
        cmd /c %windir%\System32\wusa.exe %exeWMFx32%   
    ) ELSE (
        cmd /c %windir%\System32\wusa.exe %exeWMFx64%
    )           
) else (
    cmd /c %windir%\System32\wusa.exe %exeWMFx64%
)

If %ERRORLEVEL% EQU 0 GOTO :PowerShell4_SUCCESS
If %ERRORLEVEL% EQU 1640 GOTO :PowerShell4_SUCCESS
If %ERRORLEVEL% EQU 3010 GOTO :PowerShell4_SUCCESS
REM GOTO :PowerShell4_Fail

:PowerShell4_Fail
    IF NOT EXIST "%DESTINATION%\Fail_PowerShell4_%COMPUTERNAME%.txt" ECHO %ERRORLEVEL% >"%DESTINATION%\Fail_PowerShell4_%COMPUTERNAME%.txt"
GOTO :END

:PowerShell4_SUCCESS
    IF NOT EXIST "%DESTINATION%\SuccessPendingReboot_PowerShell4_%COMPUTERNAME%.txt" ECHO. >"%DESTINATION%\SuccessPendingReboot_PowerShell4_%COMPUTERNAME%.txt"
    IF EXIST "%DESTINATION%\Fail_PowerShell4_%COMPUTERNAME%.txt" del /f /q "%DESTINATION%\Fail_PowerShell4_%COMPUTERNAME%.txt"
GOTO :END

:Has_PowerShell4
REM  IF EXIST "%DESTINATION%\SuccessPendingReboot_PowerShell4_%COMPUTERNAME%.txt" (
    IF EXIST "%DESTINATION%\Fail_PowerShell4_%COMPUTERNAME%.txt" del /f /q "%DESTINATION%\Fail_PowerShell4_%COMPUTERNAME%.txt"
    IF EXIST "%DESTINATION%\WindowsUpdateStopped_%COMPUTERNAME%.txt" del /f /q "%DESTINATION%\WindowsUpdateStopped_%COMPUTERNAME%.txt"
    del /f /q "%DESTINATION%\SuccessPendingReboot_PowerShell4_%COMPUTERNAME%.txt"
    ECHO. >"%DESTINATION%\Success_PowerShell4_%COMPUTERNAME%.txt"
REM  ) ELSE (
REM     ECHO. >"%DESTINATION%\%COMPUTERNAME%_Has_PowerShell4.txt"
REM  )



GOTO :END

:TAG_EXCEPTION_NET45
IF NOT EXIST "%DESTINATION%\DoNotUpgradeToDotNet45_%COMPUTERNAME%.txt" (
    eventcreate /L "APPLICATION" /T Information /SO "%SOURCE%" /id 779 /d "Tagged with DoNotUpgradeToDotNet45"
    ECHO. >"%DESTINATION%\DoNotUpgradeToDotNet45_%COMPUTERNAME%.txt"
)
GOTO :END

:TAG_EXCEPTION_PS4
IF NOT EXIST "%DESTINATION%\DoNotUpgradeToPowerShell4_%COMPUTERNAME%.txt" (
    eventcreate /L "APPLICATION" /T Information /SO "%SOURCE%" /id 779 /d "Tagged with DoNotUpgradeToPowerShell4"
    ECHO. >"%DESTINATION%\DoNotUpgradeToPowerShell4_%COMPUTERNAME%.txt"
)
GOTO :END

:WindowsUpdateStopped
IF NOT EXIST "%DESTINATION%\WindowsUpdateStopped_%COMPUTERNAME%.txt" (
    ECHO. >"%DESTINATION%\WindowsUpdateStopped_%COMPUTERNAME%.txt"
)
GOTO :END

:END
ENDLOCAL
Exit /b
    
por 26.11.2013 / 16:55