Archiv pro štítek: powershell

SCOM: Agent proxy enabled – pro všechny agenty?

Ve spoustě případů je nutné nastavit tuto vlastnost, jinak MP nebude správně fungovat (MP pro Exchange, DC, Cluster, …). Není potom jednodušší globálně všem agentům nastavit rovnou …? Nenalezl jsem informace, že by to zásadně vadilo.

Bylo publikováno několik skriptů a v komentáři dole uvedeného odkazu uvádí Daniele Musceta globální příkaz, který nelze z GUI použít:

There is also a GLOBAL Setting for the whole management Group (like there was in MOM2005) but it is not exposed in the UI.
Set-DefaultSetting -Name HealthService\ProxyingEnabled -Value True
Once you do this, ALL agents should automatically inerit it and you won’t have to do it again. I don’t think it is supported, and I have not personally done TESTING with it, but it should work.

Zdroj: How to set Agent proxy enabled for all agents – Kevin Holman.

SCOM: jak zobrazit Product / Company Knowledge?

Navazuji na předchozí příspěvek – SCOM: Jak prozkoumat Sealed Management Pack?, který popisuje, jak získáme obsah MP v čitelném formátu XML. Skript jsem použil na Microsoft.Windows.InternetInformationServices.2008.mp a získal jsem Microsoft.Windows.InternetInformationServices.2008.xml

Protože mne nyní zajímá pouze část obsahu tohoto souboru, kopíroval jsem do nového souboru knowledgeArticlesIIS7.xml pouze část, obsahující tyto články – od <KnowledgeArticles> až po </KnowledgeArticles>. Následující skript jsem pak použil abych získal výstup ve formátu HTML, protože se v prohlížeči zobrazuje lépe než původní formát MAML.

$xml =  [string](Get-Content "C:\scripts\knowledgeArticlesIIS7.xml")
$xml2 = $xml.Replace("<KnowledgeArticle ElementID=", "<h1>")
$xml = $xml2.Replace('Visible="true">', "</h1>")
$xml2 = $xml.Replace("          "," ")
$xml = $xml2.Replace("     "," ")
$xml2 = $xml.Replace("   "," ")
$xml = $xml2.Replace("<MamlContent>", "")
$xml2 = $xml.Replace("</MamlContent>", "")
$xml = $xml2.Replace('<maml:section xmlns:maml="http://schemas.microsoft.com/maml/2004/10">', "")
$xml2 = $xml.Replace("</maml:section>", "")
$xml = $xml2.Replace("<maml:title>","<h2>")
$xml2 = $xml.Replace("</maml:title>","</h2>")
$xml = $xml2.Replace("<maml:para>","<p>")
$xml2 = $xml.Replace("</maml:para>","</p>")
$xml = $xml2.Replace("<maml:ui>","<u><i>")
$xml2 = $xml.Replace("</maml:ui>","</u></i>")
$xml = $xml2.Replace("<maml:para />","<p />")
$xml2 = $xml.Replace("<maml:list>","<ul>")
$xml = $xml2.Replace("</maml:list>","</ul>")
$xml2 = $xml.Replace("<maml:listItem>","<li>")
$xml = $xml2.Replace("</maml:listItem>","</li>")

$xml2 = $xml + "</body></html>"
$xml = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <meta name="generator" content="Powershell">
  <title></title>
  </head>
  <body>' + $xml2
Set-Content -Path "C:\scripts\knowledgeArticlesIIS7_ps.html" -Value $xml

Část výstupního souboru zobrazená v prohlížeči IE:

SCOM: Jak prozkoumat Sealed Management Pack?

Nedávno jsem stál před úkolem, jak prozkoumat zapečetěný (sealed) Management Pack, který je v datovém formátu .MP, tedy „nečitelný“. Jednou možností je import takového MP do živého systému Operations Manager a prozkoumání pomocí nástrojů SCOM. Pokud potřebujeme průzkum provádět mimo živý systém SCOM, využijeme MP Viewer (Boris Yanuspolsky) nebo skript od téhož autora:

param($mpFilePath,$outputDirectory)
# http://blogs.msdn.com/b/boris_yanushpolsky/archive/2007/08/16/unsealing-a-management-pack.aspx
$assembly = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.EnterpriseManagement.OperationsManager")
$mp = new-object Microsoft.EnterpriseManagement.Configuration.ManagementPack($mpFilePath)
$mpWriter = new-object Microsoft.EnterpriseManagement.Configuration.IO.ManagementPackXmlWriter($outputDirectory)
$mpWriter.WriteManagementPack($mp)
# použití: powershell d:\MpToXml.ps1 -mpFilePath:'d:\Microsoft.Exchange.Server.2003.Monitoring.mp' -outputDirectory:'d:\'

MP Viewer dovolí exportovat přehlednou tabulku s obsahem MP. Skript má výhodu v detailnějším pohledu na strukturu MP, včetně výpisu obsažených skriptů VBS. V obou případech je podmínkou pracovat na počítači, kde je instalováno klientské prostředí SCOM – Operations Console, Command Shell. Popravdě by mohla stačit knihovna

C:\Program Files\System Center Operations Manager 2007\SDK Binaries\Microsoft.EnterpriseManagement.OperationsManager.dll

Odkazy na blog (Boris Yanushpolsky):

MP Viewer, PS Script MpToXml.ps1

PowerShell a stav CRL

Výpis platnosti seznamu odvolaných certifikátů pomocí PowerShellu + rozšíření (Quest) ActiveRoles Management Shell

PS X:\> Get-QADPKIObject CDP | Get-QADCertificateRevocationList |  where-object {$_.IssuedBy -eq "CA01"}

Type    Number   BaseNumber   KeyIndex     EffectiveDate   NextUpdate      Entries  Issuer
----    ------   ----------   --------     -------------   ----------      -------  ------
Base    3                     0            27.1.2011       11.2.2011       0        CN=CA01, DC=studio...
Delta   2                     0            23.1.2011       7.2.2011        0        CN=CA01, DC=studio...

Počet zbývajících dní platnosti úplného seznamu CRL zjistíme:

$crl = Get-QADPKIObject CDP | Get-QADCertificateRevocationList | where-object {$_.IssuedBy -eq "CA01" -and $_.Type -eq "Base" }
($crl.NextPublish - (Get-Date) ).TotalDays

13,6310107219329

Group Policy: WMI Filter – Windows Versions

Filtry pro vymezení politiky (zásady skupiny) pouze na konkrétní počítače podle verze operačního systému (version) nebo podle typu (productType). Použijeme WMI Filter, například pro počítače s Windows 7 to bude:

select * from Win32_OperatingSystem where Version like "6.1%" and ProductType = "1"

Podmínky pro další operační systémy:

Operating system Version
Windows 7 Version like "6.1%" and ProductType = "1"
Windows Vista Version like "6.0%" and ProductType = "1"
Windows XP (Version like "5.1%" or Version like "5.2%") and ProductType = "1"
Windows 2008 Version like "6.0%" and ProductType = "3"
Windows 2008 R2 Version like "6.1%" and ProductType = "3"
Windows 2003 Version like "5.2%" and ProductType = "3"

Hodnoty ProductType znamenají:

ProductType Version
1 client
2 domain controller (server)
3 server

Script Center uvádí v galerii skriptů funkci pro PowerShell pro “automatické” vytvoření asi dvaceti filtrů WMI – Using Powershell to Automatically Create WMI Filters

PowerShell a Group Policy

PowerShell ve Windows 2008 R2 přišel konečně s implementací příkazů pro správu Active Directory – AD Module for Windows PowerShell. Tato funkčnost byla již dříve řešena poměrně dobře dvěma přístupy, jednak komunitou (PSCX) a pak také firmou Quest Software. Podíval jsem se na možnosti správy zásad skupiny, tedy objektů Group Policy. Nechal jsem se inspirovat knihou Patrika Maliny.

Příkazy, které máme k dispozici – CmdLets jsou přehledně uvedeny zde. Po spuštění modulu AD však nejsou k dispozici  a musíme je nejprve importovat:

import-module grouppolicy

Seznam příkazů zobrazí

get-command –module grouppolicy

Všechny objekty GP vypíšeme:

get-gpo –all

Veškerá nastavení politik uložíme do souboru ve formátu html:

Get-GPOReport -ReportType html -All | Set-Content c:\temp\all_gpos.html

Výsledné uplatnění pro konkrétního uživatele nebo konkrétní server uložíme:

Get-GPResultantSetOfPolicy -computer dc02 -ReportType html -Path c:\temp\dc02_rsop.html

Get-GPResultantSetOfPolicy -User administrator -ReportType html -Path c:\temp\admin_rsop.html
RsopMode        : Logging
Namespace       : \\DC02\Root\Rsop\NS4AEB272C_D982_44B8_94DF_A02D868E4642
LoggingComputer : DC02
LoggingUser     : administrator
LoggingMode     : User

Dále se podíváme na OUs – Organizational Units a dědění nastavení GP. Přehled OU nám zobrazí příkaz:

Get-ADOrganizationalUnit -Filter * | ft name, distinguishedname -AutoSize

name               distinguishedname
----               -----------------
Domain Controllers OU=Domain Controllers,DC=studio,DC=cs
Servers            OU=Servers,DC=studio,DC=cs
Workstations       OU=Workstations,DC=studio,DC=cs

Připojené objekty a děděná nastavení zobrazíme:

Get-ADOrganizationalUnit -Filter * | Get-GPInheritance | fl name, path, gpoinheritanceblocked, gpolinks, inheritedgpolinks

 

Name                  : domain controllers
Path                  : ou=domain controllers,dc=studio,dc=cs
GpoInheritanceBlocked : False
GpoLinks              : {Default Domain Controllers Policy}
InheritedGpoLinks     : {Default Domain Controllers Policy, Default Domain Poli
cy}

 

Name                  : servers
Path                  : ou=servers,dc=studio,dc=cs
GpoInheritanceBlocked : False
GpoLinks              : {GP_Servers}
InheritedGpoLinks     : {GP_Servers, Default Domain Policy}

 

Name                  : workstations
Path                  : ou=workstations,dc=studio,dc=cs
GpoInheritanceBlocked : False
GpoLinks              : {GP_XP_computer}
InheritedGpoLinks     : {GP_XP_computer, Default Domain Policy}

A jak je to s oprávněními k objektům? Např. pro politiku gp_xp_computer :

get-gpo -Name gp_xp_computer | Get-GPPermissions -All

Trustee     : Authenticated Users
TrusteeType : WellKnownGroup
Permission  : GpoApply
Inherited   : False

 

Trustee     : Domain Admins
TrusteeType : Group
Permission  : GpoEditDeleteModifySecurity
Inherited   : False

 

Trustee     : Enterprise Admins
TrusteeType : Group
Permission  : GpoEditDeleteModifySecurity
Inherited   : False

 

Trustee     : ENTERPRISE DOMAIN CONTROLLERS
TrusteeType : WellKnownGroup
Permission  : GpoRead
Inherited   : False

 

Trustee     : SYSTEM
TrusteeType : WellKnownGroup
Permission  : GpoEditDeleteModifySecurity
Inherited   : False

A naopak oprávnění konkrétní skupiny ke všem GPO?

get-gpo -all | ForEach-Object {„$($_.displayname): $((get-gppermissions -targettype group -targetname „Authenticated Users“ -name $_.
displayname).permission)“}

GP_Servers: GpoApply
GP_XP_computer: GpoApply
Default Domain Policy: GpoApply
Default Domain Controllers Policy: GpoApply

Nový prázdný objekt GP vytvoříme:

New-GPO -Name GP_Win2008_Server

DisplayName      : GP_Win2008_Server
DomainName       : studio.cs
Owner            : STUDIO\Domain Admins
Id               : 64a97483-51dc-4811-bf89-a579e9a2cb49
GpoStatus        : AllSettingsEnabled
Description      :
CreationTime     : 7.1.2011 10:20:03
ModificationTime : 7.1.2011 10:20:03
UserVersion      : AD Version: 0, SysVol Version: 0
ComputerVersion  : AD Version: 0, SysVol Version: 0
WmiFilter        :

A připojíme

New-GPLink -Name GP_Win2008_Server -Target „ou=servers,dc=studio,dc=cs“ -linkenabled yes

GpoId       : 64a97483-51dc-4811-bf89-a579e9a2cb49
DisplayName : GP_Win2008_Server
Enabled     : True
Enforced    : False
Target      : OU=Servers,DC=studio,DC=cs
Order       : 2

Objekt GP můžeme kopírovat a vytvořit zcela nový GPO:

Copy-GPO -SourceName GP_Win2008_Server -TargetName GP_Exchange_Server

ZÁLOHA A OBNOVA GPO

Backup-GPO -All -path c:\temp\gpos\

Restore-GPO -Path C:\temp\gpos -Name GP_XP_Computer

Poznámka:

Podmínkou je domain controller Windows Server 2008 R2 nebo Windows Server 2008 R2 s instalovanou správou Group Policy Management nebo Windows 7 a nástroje Remote Server Administration Tools

Kniha: Jak vyzrát na Microsoft Windows PowerShell 2.0

alt

Knihu Patrika Maliny mohu jedině doporučit, zabývá se dostatečně důkladně skriptovacím jazykem PowerShell ve Windows. Podtitul je “Rychlý zdroj informací pro zaneprázdněné administrátory” a je rozhodně pravdivý, začátečník bude možná trochu tápat, odborník si přijde na své. Vydavatel uvádí obsažená témata knihy takto:

  • Spouštění příkazů a skriptů v PowerShellu lokálně i vzdáleně
  • Zpracování událostí v PowerShellu
  • Správa služeb ve Windows
  • Práce s certifikáty, místními účty a skupinami
  • Správa síťové konfigurace Windows
  • Sdílení složek a tiskáren
  • Propojení PowerShellu se službou Active Directory
  • Objekty Group Policy
  • Databáze v PowerShellu

Jak vyzrát na Microsoft Windows PowerShell 2.0 – Computer Press, a. s..  NTK: A 46224

Powershell a jednoduchý dotaz do databáze

Před časem jsem zkoušel pomocí příkazového řádku Command  Shell v systému Operations Manager 2007 zjistit podrobnosti k definicím alertů a zjistil jsem, že nejjednodušší cestou bude číst informaci přímo z databáze OperationsManager. Jak se jednoduše připojit k databázím? Následující příklad ukazuje nejprve dva dotazy do databáze ACS, tj. OperationsManagerAC a třetí dotaz je směrován do databáze OperationsManager. Pomocí prostředků .Net definujeme dotaz, připojení, kanál a datovou sadu. Jakmile se úspěšně připojíme, můžeme získaná data zpracovat:

$query= "SELECT * FROM [OperationsManagerAC].[dbo].[dtConfig]"
$connection = "server=SCOM07;trusted_connection=true;database=OperationsManagerAC"
$set = New-Object "System.Data.Dataset" "myData"
$channel = New-Object "System.Data.SQLclient.SQLdataAdapter" ($query,$connection)
$channel.fill($set)
$set.tables | fl 

#### druhy dotaz
$query2= "SELECT * FROM [OperationsManagerAC].[dbo].[dtMachine]"
$set2 = New-Object "System.Data.Dataset" "myData2"
$channel2 = New-Object "System.Data.SQLclient.SQLdataAdapter" ($query2,$connection)
$channel2.fill($set2)
$set2.tables | fl 

#### treti dotaz
$query3 = "SELECT top 10 [RuleModuleId]
      ,[RuleModuleName]
      ,[RuleModuleRole]
      ,[ModuleTypeId]
      ,[RuleId]
      ,[TargetTypeId]
      ,[RuleModuleConfiguration]
      ,[RuleModuleOrder]
  FROM [OperationsManager].[dbo].[RuleModule]"
$connection3 = "server=SCOM07;trusted_connection=true;database=OperationsManager"
$set3 = New-Object "System.Data.Dataset" "myData3"
$channel3 = New-Object "System.Data.SQLclient.SQLdataAdapter" ($query3,$connection3)
$channel3.fill($set3)
$set3.tables | fl rulemoduleconfiguration

Výpis výstupů všech tří dotazů následuje:

1) nejprve kofigurace ACS:


Id      : 1
Value   : 1
Comment : convert timestamps to local time

Id      : 2
Value   : 6
Comment : database schema version

Id      : 3
Value   : 1
Comment : perform index maintenance

Id      : 4
Value   : 0
Comment : table switch offset in seconds since midnight UTC

Id      : 5
Value   : 86400
Comment : table switch interval in seconds

Id      : 6
Value   : 15
Comment : number of partitions

2) seznam serverů (forwarders) ACS:


Id                : 0
CreationTime      : 9.8.2010 15:38:25
Sid               : S-1-5-21-1056727167-2314404654-873565541-1103
Description       : TRIAL\SCOM07$
DistinguishedName : CN=SCOM07,CN=Computers,DC=trial,DC=net

Id                : 1
CreationTime      : 20.8.2010 22:10:24
Sid               : S-1-5-21-1056727167-2314404654-873565541-1000
Description       : TRIAL\DC01$
DistinguishedName : CN=DC01,OU=Domain Controllers,DC=trial,DC=net

3) výpis z konfigurace pravidel:

RuleModuleConfiguration : <Query>select sum(HitCount), SourceEntityId from AemC
                          rashCounters AC join MT_WatsonBucket WB on AC.SourceE
                          ntityId = WB.BaseManagedEntityId where EntityTypeId =
                           1 group by SourceEntityId</Query><ObjectName>Bucket<
                          /ObjectName><CounterName>BucketErrorCount</CounterNam
                          e><Value>Columns/Column[1]</Value><ManagedEntityId>Co
                          lumns/Column[2]</ManagedEntityId><RuleId>$MPElement[N
                          ame="AEMViewsInternal!Microsoft.SystemCenter.CM.AEM.V
                          iews.Internal.BucketTotalHitCountPerfCollector"]$</Ru
                          leId>

RuleModuleConfiguration : <Scheduler><SimpleReccuringSchedule><Interval Unit="M
                          inutes">15</Interval></SimpleReccuringSchedule><Exclu
                          deDates/></Scheduler>

.