Introduktion
Microsoft har publicerat säkerhetsbulletinen MS14-025. Mer information om den här säkerhetsbulletinen:
-
Hemanvändare:
https://www.microsoft.com/security/pc-security/updates.aspxHoppa över detaljerna: hämta uppdateringarna till din hemdator eller bärbara dator från webbplatsen Microsoft Update nu:
-
IT-proffs:
Skaffa hjälp och support för den här säkerhetsuppdateringen
Hjälp med att installera uppdateringar:
Stöd för Microsoft Update
Säkerhetslösningar för IT-proffs:
TechNet Security felsökning och Support
Skydda din Windows-dator med Windows från virus och skadliga program:
Lösning för virus och Säkerhetscenter
Lokal support enligt ditt land:
Internationellt stöd
Mer Information
Kända problem och mer information om den här säkerhetsuppdateringen
Följande artiklar innehåller mer information om den här säkerhetsuppdateringen som gäller enskilda produktversioner. Artiklarna kan innehålla information om kända problem. Om så är fallet finns ett känt problem under varje artikel-länk.
-
2928120
MS14-025: Beskrivning av säkerhetsuppdatering för Windows Remote Server Administration Tools för system som har uppdatering 2919355 installeras: den 13 maj 2014 -
2961899
MS14-025: Beskrivning av säkerhetsuppdatering för Windows Remote Server Administration Tools för system som inte har uppdatera 2919355 installeras: den 13 maj 2014
Grupprincip-inställningar
Översikt
Vissa inställningar för grupprincip kan lagra ett lösenord. Den här funktionen tas bort eftersom lösenordet lagrades insecurely. Den här artikeln beskrivs ändringar i användargränssnittet och alla tillgängliga lösningar.
Följande inställningar i grupprincip tillåter inte längre användarnamn och lösenord ska sparas:
-
Enhetsmappningar
-
Lokala användare och grupper
-
Schemalagda aktiviteter
-
Tjänster
-
Datakällor
Detta påverkar beteendet för alla befintliga grupprincip-objekt (GPO) i din miljö som förlitar sig på lösenord som finns i dessa inställningar. Den kommer också att skapa nya grupprincip-inställningar med hjälp av den här funktionen.
Enhetsmappningar, lokala användare och grupper och tjänster, kan du kanske att uppnå liknande mål för säkrare, andra funktioner i Windows.
Du kan inte att uppnå samma mål som var tillgängliga via icke-säkra funktionen lösenord för grupprincip-inställningar för schemalagda aktiviteter och datakällor.
Scenarier
Följande inställningar för grupprincip som påverkas av ändringen. Varje inställning beskrivs kortfattat och sedan i detalj. Dessutom tillhandahålls lösningar som gör att du kan utföra samma uppgifter.
Aktuella inställningar |
Gäller för användare |
Gäller för datorn |
Hantering av lokala användare |
Ja |
Ja |
Mappade enheter |
Ja |
Nej. |
Tjänster |
Nej. |
Ja |
Schemalagda aktiviteter (up-nivå) |
Ja |
Ja |
Schemalagda aktiviteter (äldre) |
Ja |
Ja |
Omedelbara aktiviteter (up-nivå) |
Ja |
Ja |
Omedelbara aktiviteter (äldre) |
Ja |
Ja |
Datakällor |
Ja |
Ja |
Sammanfattning av ändringar
-
Lösenordsfält i alla aktuella inställningar är inaktiverade. Administratörer kan inte skapa nya inställningar med hjälp av fälten lösenord.
-
Fältet användarnamn är inaktiverad i vissa inställningar.
-
Befintliga inställningar som innehåller ett lösenord kan inte uppdateras. De kan endast vara borttagen eller inaktiverad, efter specifika önskemål.
-
Beteendet för ta bort och inaktivera åtgärder har inte ändrats för inställningar.
-
När en administratör öppnar någon inställning som innehåller attributet CPassword, får administratören följande varningsdialogrutan att informera honom eller henne senaste utfasningen. Om du försöker spara ändringar i nya eller befintliga inställningar som kräver attributet CPassword utlöser samma dialogruta. Bara ta bort och inaktivera åtgärder utlöser inte varningsmeddelanden.
Scenario 1: Hantering av lokala användare
Hantering av lokala användare inställning används ofta för att skapa lokala administratörer som har ett känt lösenord på en dator. Den här funktionen är inte säker på ett sådant sätt att lösenord ska lagras i grupprincip-inställningar. Därför är funktionen inte längre tillgänglig. Följande inställningar påverkas:
-
Datorkonfiguration -> Kontrollpanelen Inställningar -> lokala användare och grupper -> nya -> lokal användare
-
Användarkonfiguration -> Kontrollpanelen Inställningar -> lokala användare och grupper -> nya -> lokal användare
Viktiga ändringar
Åtgärd: Skapa eller ersätta
-
Fält för användarnamn, lösenordoch Bekräfta lösenord är inaktiverad.
-
Den här dialogrutan visas när administratören öppnar eller försöker spara ändringar i en befintlig inställning som innehåller ett lösenord.
Åtgärd: uppdatera
-
Fälten lösenord och Bekräfta lösenord är inaktiverad.
-
Den här dialogrutan visas när administratören öppnar eller försöker spara ändringar i en befintlig inställning som innehåller ett lösenord.
Åtgärd: ta bort
-
Ingen förändring i beteende
Lösningar
Följande skript tillhandahålls som ett alternativ till CPassword för dem som tidigare förlitade sig på inställningen grupprincip för att ange lokala administratörslösenord. Kopiera och spara innehållet i en ny fil i Windows PowerShell och sedan köra skriptet som anges i dess. Avsnittet.
Microsoft tillhandahåller programmeringsexempel endast utan garanti varken uttryckliga eller underförstådda. Detta inkluderar men är inte begränsat till, underförstådda garantier om säljbarhet eller lämplighet för ett särskilt ändamål. Den här artikeln förutsätter att du är bekant med det programmeringsspråk som demonstreras och de verktyg som används för att skapa och felsöka procedurer. Microsofts supporttekniker kan hjälpa till att förklara funktionen hos en viss procedur. De kommer inte ändra dessa exempel för att ge ytterligare funktioner eller skapa procedurer som motsvarar dina speciella behov.
function Invoke-PasswordRoll
{
<#
.SYNOPSIS
This script can be used to set the local account passwords on remote machines to random passwords. The username/password/server combination will be saved in a CSV file.
The account passwords stored in the CSV file can be encrypted using a password of the administrators choosing to ensure clear-text account passwords aren't written to disk.
The encrypted passwords can be decrypted using another function in this file: ConvertTo-CleartextPassword
Function: Invoke-PasswordRoll
Author: Microsoft
Version: 1.0
.DESCRIPTION
This script can be used to set the local account passwords on remote machines to random passwords. The username/password/server combination will be saved in a CSV file.
The account passwords stored in the CSV file can be encrypted using a password of the administrators choosing to ensure clear-text account passwords aren't written to disk.
The encrypted passwords can be decrypted using another function in this file: ConvertTo-CleartextPassword
.PARAMETER ComputerName
An array of computers to run the script against using PowerShell remoting.
.PARAMETER LocalAccounts
An array of local accounts whose password should be changed.
.PARAMETER TsvFileName
The file to output the username/password/server combinations to.
.PARAMETER EncryptionKey
A password to encrypt the TSV file with. Uses AES encryption. Only the passwords stored in the TSV file will be encrypted, the username and servername will be clear-text.
.PARAMETER PasswordLength
The length of the passwords which will be randomly generated for local accounts.
.PARAMETER NoEncryption
Do not encrypt the account passwords stored in the TSV file. This will result in clear-text passwords being written to disk.
.EXAMPLE
. .\Invoke-PasswordRoll.ps1 #Loads the functions in this script file
Invoke-PasswordRoll -ComputerName (Get-Content computerlist.txt) -LocalAccounts @("administrator","CustomLocalAdmin") -TsvFileName "LocalAdminCredentials.tsv" -EncryptionKey "Password1"
Connects to all the computers stored in the file "computerlist.txt". If the local account "administrator" and/or "CustomLocalAdmin" are present on the system, their password is changed
to a randomly generated password of length 20 (the default). The username/password/server combinations are stored in LocalAdminCredentials.tsv, and the account passwords are AES encrypted using the password "Password1".
.EXAMPLE
. .\Invoke-PasswordRoll.ps1 #Loads the functions in this script file
Invoke-PasswordRoll -ComputerName (Get-Content computerlist.txt) -LocalAccounts @("administrator") -TsvFileName "LocalAdminCredentials.tsv" -NoEncryption -PasswordLength 40
Connects to all the computers stored in the file "computerlist.txt". If the local account "administrator" is present on the system, its password is changed to a random generated
password of length 40. The username/password/server combinations are stored in LocalAdminCredentials.tsv unencrypted.
.NOTES
Requirements:
-PowerShellv2 or above must be installed
-PowerShell remoting must be enabled on all systems the script will be run against
Script behavior:
-If a local account is present on the system, but not specified in the LocalAccounts parameter, the script will write a warning to the screen to alert you to the presence of this local account. The script will continue running when this happens.
-If a local account is specified in the LocalAccounts parameter, but the account does not exist on the computer, nothing will happen (an account will NOT be created).
-The function ConvertTo-CleartextPassword, contained in this file, can be used to decrypt passwords that are stored encrypted in the TSV file.
-If a server specified in ComputerName cannot be connected to, PowerShell will output an error message.
-Microsoft advises companies to regularly roll all local and domain account passwords.
#>
[CmdletBinding(DefaultParameterSetName="Encryption")]
Param(
[Parameter(Mandatory=$true)]
[String[]]
$ComputerName,
[Parameter(Mandatory=$true)]
[String[]]
$LocalAccounts,
[Parameter(Mandatory=$true)]
[String]
$TsvFileName,
[Parameter(ParameterSetName="Encryption", Mandatory=$true)]
[String]
$EncryptionKey,
[Parameter()]
[ValidateRange(20,120)]
[Int]
$PasswordLength = 20,
[Parameter(ParameterSetName="NoEncryption", Mandatory=$true)]
[Switch]
$NoEncryption
)
#Load any needed .net classes
Add-Type -AssemblyName "System.Web" -ErrorAction Stop
#This is the scriptblock that will be executed on every computer specified in ComputerName
$RemoteRollScript = {
Param(
[Parameter(Mandatory=$true, Position=1)]
[String[]]
$Passwords,
[Parameter(Mandatory=$true, Position=2)]
[String[]]
$LocalAccounts,
#This is here so I can record what the server name that the script connected to was, sometimes the DNS records get messed up, it can be nice to have this.
[Parameter(Mandatory=$true, Position=3)]
[String]
$TargettedServerName
)
$LocalUsers = Get-WmiObject Win32_UserAccount -Filter "LocalAccount=true" | Foreach {$_.Name}
#Check if the computer has any local user accounts whose passwords are not going to be rolled by this script
foreach ($User in $LocalUsers)
{
if ($LocalAccounts -inotcontains $User)
{
Write-Warning "Server: '$($TargettedServerName)' has a local account '$($User)' whos password is NOT being changed by this script"
}
}
#For every local account specified that exists on this server, change the password
$PasswordIndex = 0
foreach ($LocalAdmin in $LocalAccounts)
{
$Password = $Passwords[$PasswordIndex]
if ($LocalUsers -icontains $LocalAdmin)
{
try
{
$objUser = [ADSI]"WinNT://localhost/$($LocalAdmin), user"
$objUser.psbase.Invoke("SetPassword", $Password)
$Properties = @{
TargettedServerName = $TargettedServerName
Username = $LocalAdmin
Password = $Password
RealServerName = $env:computername
}
$ReturnData = New-Object PSObject -Property $Properties
Write-Output $ReturnData
}
catch
{
Write-Error "Error changing password for user:$($LocalAdmin) on server:$($TargettedServerName)"
}
}
$PasswordIndex++
}
}
#Generate the password on the client running this script, not on the remote machine. System.Web.Security isn't available in the .NET Client profile. Making this call
# on the client running the script ensures only 1 computer needs the full .NET runtime installed (as opposed to every system having the password rolled).
function Create-RandomPassword
{
Param(
[Parameter(Mandatory=$true)]
[ValidateRange(20,120)]
[Int]
$PasswordLength
)
$Password = [System.Web.Security.Membership]::GeneratePassword($PasswordLength, $PasswordLength / 4)
#This should never fail, but I'm putting a sanity check here anyways
if ($Password.Length -ne $PasswordLength)
{
throw new Exception("Password returned by GeneratePassword is not the same length as required. Required length: $($PasswordLength). Generated length: $($Password.Length)")
}
return $Password
}
#Main functionality - Generate a password and remote in to machines to change the password of local accounts specified
if ($PsCmdlet.ParameterSetName -ieq "Encryption")
{
try
{
$Sha256 = new-object System.Security.Cryptography.SHA256CryptoServiceProvider
$SecureStringKey = $Sha256.ComputeHash([System.Text.UnicodeEncoding]::Unicode.GetBytes($EncryptionKey))
}
catch
{
Write-Error "Error creating TSV encryption key" -ErrorAction Stop
}
}
foreach ($Computer in $ComputerName)
{
#Need to generate 1 password for each account that could be changed
$Passwords = @()
for ($i = 0; $i -lt $LocalAccounts.Length; $i++)
{
$Passwords += Create-RandomPassword -PasswordLength $PasswordLength
}
Write-Output "Connecting to server '$($Computer)' to roll specified local admin passwords"
$Result = Invoke-Command -ScriptBlock $RemoteRollScript -ArgumentList @($Passwords, $LocalAccounts, $Computer) -ComputerName $Computer
#If encryption is being used, encrypt the password with the user supplied key prior to writing to disk
if ($Result -ne $null)
{
if ($PsCmdlet.ParameterSetName -ieq "NoEncryption")
{
$Result | Select-Object Username,Password,TargettedServerName,RealServerName | Export-Csv -Append -Path $TsvFileName -NoTypeInformation
}
else
{
#Filters out $null entries returned
$Result = $Result | Select-Object Username,Password,TargettedServerName,RealServerName
foreach ($Record in $Result)
{
$PasswordSecureString = ConvertTo-SecureString -AsPlainText -Force -String ($Record.Password)
$Record | Add-Member -MemberType NoteProperty -Name EncryptedPassword -Value (ConvertFrom-SecureString -Key $SecureStringKey -SecureString $PasswordSecureString)
$Record.PSObject.Properties.Remove("Password")
$Record | Select-Object Username,EncryptedPassword,TargettedServerName,RealServerName | Export-Csv -Append -Path $TsvFileName -NoTypeInformation
}
}
}
}
}
function ConvertTo-CleartextPassword
{
<#
.SYNOPSIS
This function can be used to decrypt passwords that were stored encrypted by the function Invoke-PasswordRoll.
Function: ConvertTo-CleartextPassword
Author: Microsoft
Version: 1.0
.DESCRIPTION
This function can be used to decrypt passwords that were stored encrypted by the function Invoke-PasswordRoll.
.PARAMETER EncryptedPassword
The encrypted password that was stored in a TSV file.
.PARAMETER EncryptionKey
The password used to do the encryption.
.EXAMPLE
. .\Invoke-PasswordRoll.ps1 #Loads the functions in this script file
ConvertTo-CleartextPassword -EncryptionKey "Password1" -EncryptedPassword 76492d1116743f0423413b16050a5345MgB8AGcAZgBaAHUAaQBwADAAQgB2AGgAcABNADMASwBaAFoAQQBzADEAeABjAEEAPQA9AHwAZgBiAGYAMAA1ADYANgA2ADEANwBkADQAZgAwADMANABjAGUAZQAxAGIAMABiADkANgBiADkAMAA4ADcANwBhADMAYQA3AGYAOABkADcAMQA5ADQAMwBmAGYANQBhADEAYQBjADcANABkADIANgBhADUANwBlADgAMAAyADQANgA1ADIAOQA0AGMAZQA0ADEAMwAzADcANQAyADUANAAzADYAMAA1AGEANgAzADEAMQA5ADAAYwBmADQAZAA2AGQA"
Decrypts the encrypted password which was stored in the TSV file.
#>
Param(
[Parameter(Mandatory=$true)]
[String]
$EncryptedPassword,
[Parameter(Mandatory=$true)]
[String]
$EncryptionKey
)
$Sha256 = new-object System.Security.Cryptography.SHA256CryptoServiceProvider
$SecureStringKey = $Sha256.ComputeHash([System.Text.UnicodeEncoding]::Unicode.GetBytes($EncryptionKey))
[SecureString]$SecureStringPassword = ConvertTo-SecureString -String $EncryptedPassword -Key $SecureStringKey
Write-Output ([System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToCoTaskMemUnicode($SecureStringPassword)))
}
Administratörer kan lägga till lokala administratörskonton datorer genom att skapa en Active Directory-grupp och lägger till den i den lokala gruppen administratörer via grupprincip-Inställningar -> lokal grupp. Den här åtgärden cachelagrar inte referenser. Av följande slag i dialogrutan. Denna lösning kräver en anslutning till Active Directory DS när användaren har loggat in med hjälp av dessa referenser.
Scenario 2: Mappade enheter
Administratörer använder enhetsmappningar för att tilldela användare platser i nätverket. Funktion för lösenordsskydd används för att kontrollera att auktoriserade åtkomst till enheten. Följande inställningar påverkas:
-
Användarkonfiguration-> Windows-inställningar -> enhet Maps -> Nytt -> mappad enhet
Viktiga ändringar
Åtgärd: Skapa, uppdatera eller ersätta
-
Fält för användarnamn, lösenordoch Bekräfta lösenord är inaktiverad.
Åtgärd: ta bort
-
Ingen förändring i beteende
Lösningar
Istället för att använda lösenordsmetoden för autentisering kan du använda Utforskaren för att hantera behörigheter och tilldela rättigheter till användare. Du kan använda Active Directory-objekt till behörighet till mappen.
Scenario 3: tjänster
Du kan använda inställningen tjänster för att ändra tjänstens egenskaper på ett sådant sätt att de körs i en kontext än sin ursprungliga säkerhetskontext. Följande inställningar påverkas:
-
Datorkonfiguration -> Kontrollpanelen Inställningar -> tjänster -> Nytt -> Service
Viktiga ändringar
Start: Ingen ändring, automatisk eller manuell
-
Fälten lösenord och Bekräfta lösenord är inaktiverad.
-
Administratören kan använda endast inbyggda konton.
Start: inaktivera
-
Ingen förändring i beteende
Dialogrutan Ny
-
Administratörer som använder icke-inbyggda-användare för det här kontot"visas följande varning:
Lösningar
Tjänster kan fortfarande köras som ett lokalt systemkonto. Tjänstbehörigheter kan ändras på det sätt som beskrivs i följande artikel i Microsoft Knowledge Base:
256345 hur du konfigurerar grupprincip-inställningar för att ange säkerhet för systemtjänster
Observera att om den tjänst som du vill konfigurera inte finns måste du konfigurera inställningar på en dator där tjänsten körs.
Scenario 4: Schemalagda och omedelbara aktiviteter (up-nivå)
Dessa används för att köra schemalagda aktiviteter i en viss kontext. Möjligheten att lagra autentiseringsuppgifter för schemalagda aktiviteter ska köras som en användare när användaren inte är inloggad är inte längre tillgänglig. Följande inställningar påverkas. (Tänk som på vissa plattformar "minst Windows 7" ersättas med "Windows Vista och senare versioner.")
-
Datorkonfiguration -> Kontrollpanelsinställningar -> schemalagda aktiviteter -> Nytt -> schemalagda aktiviteter (minst Windows 7)
-
Datorkonfiguration -> Kontrollpanelsinställningar -> schemalagda aktiviteter -> Nytt -> omedelbar aktivitet (minst Windows 7)
-
Användarkonfiguration -> Kontrollpanelsinställningar -> schemalagda aktiviteter -> Nytt -> schemalagda aktiviteter (minst Windows 7)
-
Användarkonfiguration -> Kontrollpanelsinställningar -> schemalagda aktiviteter -> Nytt -> omedelbar aktivitet (minst Windows 7)
Viktiga ändringar
Åtgärd: Skapa, uppdatera eller ersätta
-
När du markerar alternativet Kör oavsett om användaren är inloggad eller inte uppmanas administratören autentiseringsuppgifter inte längre i en dialogruta.
-
Kryssrutan Spara inte lösenordet är inaktiverad. Som standard kontrolleras även rutan.
Åtgärd: ta bort
Ingen förändring i beteende
Lösningar
För den "schemalagda aktiviteten (minst Windows 7)" och "omedelbar aktivitet (minst Windows 7)" uppgifter, Administratörer kan använda specifika användarkonton när den angivna användaren är inloggad. Eller så kan de bara har tillgång till lokala resurser som användaren. Dessa uppgifter kan fortfarande köra inom ramen för den lokala tjänsten.
Scenario 5: Schemalagda och omedelbara aktiviteter (äldre)Detta är den äldre versionen av inställningar som används för att köra schemalagda aktiviteter i en viss kontext. Möjligheten att lagra autentiseringsuppgifter för schemalagda aktiviteter ska köras som en användare när användaren inte är inloggad är inte längre tillgänglig. Följande inställningar påverkas:
-
Datorkonfiguration -> Kontrollpanelen Inställningar -> schemalagda aktiviteter -> nya -> schemalagd aktivitet
-
Datorkonfiguration -> Kontrollpanelen Inställningar -> schemalagda aktiviteter -> Nytt -> omedelbar aktivitet (Windows XP)
-
Användarkonfiguration -> Kontrollpanelen Inställningar -> schemalagda aktiviteter -> nya -> schemalagd aktivitet
-
Användarkonfiguration -> Kontrollpanelen Inställningar -> schemalagda aktiviteter -> Nytt -> omedelbar aktivitet (Windows XP)
Viktiga ändringar
Åtgärd: Skapa, uppdatera eller ersätta
-
Kryssrutan Kör som är inaktiverad. Därför är fälten Användarnamn, lösenordoch Bekräfta lösenord alla inaktiverade.
Åtgärd: ta bort
Ingen förändring i beteende
Lösningar
"Aktivitet" och "Omedelbar aktivitet (Windows XP)"-objekt körs schemalagda aktiviteter med hjälp av behörigheter som är tillgängliga för den lokala tjänsten.
Scenario 6: Datakällor
Inställningen datakällor används för att koppla en datakälla till en dator eller användare. Den här funktionen lagras inte längre referenser om du vill aktivera åtkomst till datakällor som skyddas av ett lösenord. Följande inställningar påverkas:
-
Datorkonfiguration -> Kontrollpanelen Inställningar -> datakällor
-
Användarkonfiguration -> Kontrollpanelen Inställningar -> datakällor
Viktiga ändringar
Åtgärd: Skapa, uppdatera eller ersätta
-
Fält för Användarnamn, lösenordoch Bekräfta lösenord är inaktiverad:
Åtgärd: ta bort
-
Ingen förändring i beteende
Lösningar
Det finns inga lösningar. Den här inställningen lagras inte längre referenser om du vill tillåta åtkomst till datakällor som skyddas av ett lösenord.
Utfasningen av CPassword
Ta bort CPassword
Windows PowerShell-skript som ingår i den här Microsoft Knowledge Base-artikeln upptäcker om en domän innehåller alla inställningar för grupprincip som kan användas för CPassword. Om CPassword XML upptäcks i en viss inställning visas i listan.
Identifiera CPassword inställningar
Det här skriptet måste köras från en lokal katalog på den domänkontrollant som du vill rengöra. Kopiera och spara innehållet i en ny fil i Windows PowerShell, bestämma systemenheten och sedan köra skriptet som anges i följande användning.
<#.SYNOPSIS
Group Policy objects in your domain can have preferences that store passwords for different tasks, such as the following:
1. Data Sources
2. Drive Maps
3. Local Users
4. Scheduled Tasks (both XP and up-level)
5. Services
These passwords are stored in SYSVOL as part of GP preferences and are not secure because of weak encryption (32-byte AES).
Therefore, we recommend that you not deploy such preferences in your domain environment and remove any such existing
preferences. This script is to help administrator find GP Preferences in their domain's SYSVOL that contains passwords.
.DESCRIPTION
This script should be run on a DC or a client computer that is installed with RSAT to print all the preferences that contain
password with information such as GPO, Preference Name, GPEdit path under which this preference is defined.
After you have a list of affected preferences, these preferences can be removed by using the editor in the Group Policy Management Console.
.SYNTAX
Get-SettingsWithCPassword.ps1 [-Path <String>]
.EXAMPLE
Get-SettingsWithCPassword.ps1 -Path %WinDir%\SYSVOL\domain
Get-SettingsWithCPassword.ps1 -Path <GPO Backup Folder Path>
.NOTES
If Group Policy PS module is not found the output will contain GPO GUIDs instead of GPO names. You can either run
this script on a domain controller or rerun the script on the client after you have installed RSAT and
enabled the Group Policy module.
Or, you can use GPO GUIDs to obtain GPO names by using the Get-GPO cmdlet.
.LINK
http://go.microsoft.com/fwlink/?LinkID=390507
#>
#----------------------------------------------------------------------------------------------------------------
# Input parameters
#--------------------------------------------------------------------------------------------------------------
param(
[string]$Path = $(throw "-Path is required.") # Directory path where GPPs are located.
)
#---------------------------------------------------------------------------------------------------------------
$isGPModuleAvailable = $false
$impactedPrefs = { "Groups.xml", "ScheduledTasks.xml","Services.xml", "DataSources.xml", "Drives.xml" }
#----------------------------------------------------------------------------------------------------------------
# import Group olicy module if available
#----------------------------------------------------------------------------------------------------------------
if (-not (Get-Module -name "GroupPolicy"))
{
if (Get-Module -ListAvailable |
Where-Object { $_.Name -ieq "GroupPolicy" })
{
$isGPModuleAvailable = $true
Import-Module "GroupPolicy"
}
else
{
Write-Warning "Unable to import Group Policy module for PowerShell. Therefore, GPO guids will be reported.
Run this script on DC to obtain the GPO names, or use the Get-GPO cmdlet (on DC) to obtain the GPO name from GPO guid."
}
}
else
{
$isGPModuleAvailable = $true
}
Function Enum-SettingsWithCpassword ( [string]$sysvolLocation )
{
# GPMC tree paths
$commonPath = " -> Preferences -> Control Panel Settings -> "
$driveMapPath = " -> Preferences -> Windows Settings -> "
# Recursively obtain all the xml files within the SYVOL location
$impactedXmls = Get-ChildItem $sysvolLocation -Recurse -Filter "*.xml" | Where-Object { $impactedPrefs -cmatch $_.Name }
# Each xml file contains multiple preferences. Iterate through each preference to check whether it
# contains cpassword attribute and display it.
foreach ( $file in $impactedXmls )
{
$fileFullPath = $file.FullName
# Set GPP category. If file is located under Machine folder in SYSVOL
# the setting is defined under computer configuration otherwise the
# setting is a to user configuration
if ( $fileFullPath.Contains("Machine") )
{
$category = "Computer Configuration"
}
elseif ( $fileFullPath.Contains("User") )
{
$category = "User Configuration"
}
else
{
$category = "Unknown"
}
# Obtain file content as XML
try
{
[xml]$xmlFile = get-content $fileFullPath -ErrorAction Continue
}
catch [Exception]{
Write-Host $_.Exception.Message
}
if ($xmlFile -eq $null)
{
continue
}
switch ( $file.BaseName )
{
Groups
{
$gppWithCpassword = $xmlFile.SelectNodes("Groups/User") | where-Object { [String]::IsNullOrEmpty($_.Properties.cpassword) -eq $false }
$preferenceType = "Local Users"
}
ScheduledTasks
{
$gppWithCpassword = $xmlFile.SelectNodes("ScheduledTasks/*") | where-Object { [String]::IsNullOrEmpty($_.Properties.cpassword) -eq $false }
$preferenceType = "Scheduled Tasks"
}
DataSources
{
$gppWithCpassword = $xmlFile.SelectNodes("DataSources/DataSource") | where-Object { [String]::IsNullOrEmpty($_.Properties.cpassword) -eq $false }
$preferenceType = "Data sources"
}
Drives
{
$gppWithCpassword = $xmlFile.SelectNodes("Drives/Drive") | where-Object { [String]::IsNullOrEmpty($_.Properties.cpassword) -eq $false }
$preferenceType = "Drive Maps"
}
Services
{
$gppWithCpassword = $xmlFile.SelectNodes("NTServices/NTService") | where-Object { [String]::IsNullOrEmpty($_.Properties.cpassword) -eq $false }
$preferenceType = "Services"
}
default
{ # clear gppWithCpassword and preferenceType for next item.
try
{
Clear-Variable -Name gppWithCpassword -ErrorAction SilentlyContinue
Clear-Variable -Name preferenceType -ErrorAction SilentlyContinue
}
catch [Exception]{}
}
}
if ($gppWithCpassword -ne $null)
{
# Build GPO name from GUID extracted from filePath
$guidRegex = [regex]"\{(.*)\}"
$match = $guidRegex.match($fileFullPath)
if ($match.Success)
{
$gpoGuid = $match.groups[1].value
$gpoName = $gpoGuid
}
else
{
$gpoName = "Unknown"
}
if($isGPModuleAvailable -eq $true)
{
try
{
$gpoInfo = Get-GPO -Guid $gpoGuid -ErrorAction Continue
$gpoName = $gpoInfo.DisplayName
}
catch [Exception] {
Write-Host $_.Exception.Message
}
}
# display prefrences that contain cpassword
foreach ( $gpp in $gppWithCpassword )
{
if ( $preferenceType -eq "Drive Maps" )
{
$prefLocation = $category + $driveMapPath + $preferenceType
}
else
{
$prefLocation = $category + $commonPath + $preferenceType
}
$obj = New-Object -typeName PSObject
$obj | Add-Member –membertype NoteProperty –name GPOName –value ($gpoName) –passthru |
Add-Member -MemberType NoteProperty -name Preference -value ($gpp.Name) -passthru |
Add-Member -MemberType NoteProperty -name Path -value ($prefLocation)
Write-Output $obj
}
} # end if $gppWithCpassword
} # end foreach $file
} # end functions Enum-PoliciesWithCpassword
#-----------------------------------------------------------------------------------
# Check whether Path is valid. Enumerate all settings that contain cpassword.
#-----------------------------------------------------------------------------------
if (Test-Path $Path )
{
Enum-SettingsWithCpassword $Path
}
else
{
Write-Warning "No such directory: $Path"
}
Exempel på användning (förutsätter att enheten är C)
.\Get-SettingsWithCPassword.ps1 –path “C:\Windows\SYSVOL\domain” | Format-List
Obs! Tänk på att du också rikta en säkerhetskopia av Grupprincipobjektet för sökvägen i en domän.
Identifieringsskriptet genererar en lista av följande slag:
Bör du spara utdata till en fil för längre listor:
.\Get-SettingsWithCPassword.ps1 –path “C:\Windows\SYSVOL\domain” | ConvertTo-Html > gpps.html
Ta bort CPassword inställningar
För att ta bort alternativ som innehåller data för CPassword, föreslår vi att du använder grupprincip konsolen Grupprinciphantering (GPMC) på domänkontrollanten eller från en klient som har verktyg för fjärrserveradministration installerat. Du kan ta bort valfri inställning i fem steg på dessa konsoler. Gör så här:
-
Öppna den inställning som innehåller data för CPassword i GPMC.
-
Ändra åtgärden att Ta bort eller Inaktiverasom gäller för inställningen.
-
Klicka på OK om du vill spara dina ändringar.
-
Vänta en eller två grupprincip uppdatera cykler att tillåta ändringar sprids till klienter.
-
Ta bort inställningen när ändringar tillämpas på alla klienter.
-
Upprepa steg 1 till 5 som behövs för att rensa hela miljön. Om identifieringsskriptet returnerar noll resultat, är du klar.
Filnamn |
SHA1-hash |
SHA256 hash |
---|---|---|
Windows6.0-KB2928120-ia64.msu |
B2A74305CB56191774BFCF9FCDEAA983B26DC9A6 |
DCE8C0F9CEB97DBF1F7B9BAF76458B3770EF01C0EDC581621BC8C3B2C7FD14E7 |
Windows6.0-KB2928120-x64.msu |
386457497682A2FB80BC93346D85A9C1BC38FBF7 |
1AF67EB12614F37F4AC327E7B5767AFA085FE676F6E81F0CED95D20393A1D38D |
Windows6.0-KB2928120-x86.msu |
42FF283781CEC9CE34EBF459CA1EFE011D5132C3 |
016D7E9DBBC5E487E397BE0147B590CFBBB5E83795B997894870EC10171E16D4 |
Windows6.1-KB2928120-ia64.msu |
5C2196832EC94B99AAF9B074D3938525B7219690 |
9958FA58134F55487521243AD9740BEE0AC210AC290D45C8322E424B3E5EBF16 |
Windows6.1-KB2928120-x64.msu |
EA5332F4E289DC799611EAB8E3EE2E86B7880A4B |
417A2BA34F8FD367556812197E2395ED40D8B394F9224CDCBE8AB3939795EC2A |
Windows6.1-KB2928120-x86.msu |
7B7B6EE24CD8BE1AB3479F9E1CF9C98982C8BAB1 |
603206D44815EF2DC262016ED13D6569BE13D06E2C6029FB22621027788B8095 |
Windows8-RT-KB2928120-x64.msu |
E18FC05B4CCA0E195E62FF0AE534BA39511A8593 |
FCAED97BF1D61F60802D397350380FADED71AED64435D3E9EAA4C0468D80141E |
Windows8-RT-KB2928120-x86.msu |
A5DFB34F3B9EAD9FA78C67DFC7ACACFA2FBEAC0B |
7F00A72D8A15EB2CA70F7146A8014E39A71CFF5E39596F379ACD883239DABD41 |
Windows8.1-KB2928120-x64.msu |
A07FF14EED24F3241D508C50E869540915134BB4 |
6641B1A9C95A7E4F0D5A247B9F488887AC94550B7F1D7B1198D5BCBA92F7A753 |
Windows8.1-KB2928120-x86.msu |
DE84667EC79CBA2006892452660EB99580D27306 |
468EE4FA3A22DDE61D85FD3A9D0583F504105DF2F8256539051BC0B1EB713E9C |
Windows8.1-KB2961899-x64.msu |
10BAE807DB158978BCD5D8A7862BC6B3EF20038B |
EC26618E23D9278FC1F02CA1F13BB289E1C6C4E0C8DA5D22E1D9CDA0DA8AFF51 |
Windows8.1-KB2961899-x86.msu |
230C64447CC6E4AB3AD7B4D4655B8D8CEFBFBE98 |
E3FAD567AB6CA616E42873D3623A777185BE061232B952938A8846A974FFA7AF |