Hotfix Status zweier Server vergleichen

Mit den nachfolgenden PowerShell Befehlen kann der Hotfix Status zweier Windows Clients oder Windows Servern auf einfache Art und Weise verglichen werden:

$server1 = "Server1"
$server2 = "Server2"
 
$server1Patches = get-hotfix -computer $server1 | Where-Object {$_.HotFixID -ne "File "}
$server2Patches = get-hotfix -computer $server2 | Where-Object {$_.HotFixID -ne "File "}
 
Compare-Object ($server1Patches) ($server2Patches) -Property HotFixID

SQL Server Befehle mit PowerShell: Beispiel mehrere DB’s offline setzen

Mit Hilfe von PowerShell kann über die SQL Server Management Objekt (SMO) API direkt T-SQL Befehle auf einem SQL Server ausgeführt werden. Nachfolgend zeige ich ein Beispiel wie anhand einer Liste von Datenbanknamen (Textdatei) die entsprechenden Datenbanken offline gesetzen werden können.

# Voraussetzungen: SQL Server Management Objects (SMO) Assembly laden
 
# Für SQL Server 2012 nachfolgenden PowerShell Befehl nutzen:
Import-Module SQLPS -DisableNameChecking
# Für SQL Server 2008 R2 und SQL Server 2008 die folgenden Befehle ausführen:
add-type -AssemblyName “Microsoft.SqlServer.ConnectionInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91″ -ErrorAction Stop
add-type -AssemblyName “Microsoft.SqlServer.Smo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91″ -ErrorAction Stop
add-type -AssemblyName “Microsoft.SqlServer.SMOExtended, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91″ -ErrorAction Stop
add-type -AssemblyName “Microsoft.SqlServer.SqlEnum, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91″ -ErrorAction Stop
add-type -AssemblyName “Microsoft.SqlServer.Management.Sdk.Sfc, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91″ -ErrorAction Stop
 
# Datenbankliste von Textdatei laden
$databases = Get-Content "C:\temp\DatabaseList.txt"
 
foreach ($db in $databases) {
    invoke-sqlcmd -ServerInstance localhost -Database master -Query "IF db_id('$db') is not null ALTER DATABASE $db SET OFFLINE WITH ROLLBACK IMMEDIATE"       
}
 
# Den PowerShell Provider wieder auf das Dateisystem zurücksetzen (optional)
cd C:

SharePoint Online Management Shell – Remote PowerShell

Mittels einer PowerShell Shell kann Remote auf die Office 365 Infrastruktur zugegriffen werden. Hier ein Beispiel für die Verbindung auf SharePoint Online.

Voraussetzungen
Software: Installation der SharePoint Online Management Shell –> Link
Berechtigungen Cloud: Global Administrator im Office 365 Tenant –> Link
Berechtigungen Lokal: PowerShell Shell als Administrator öffnen

# Connect with Tenant Admin
$User = "xy@domainname.com"
# Specify Tenant Admin URL
$TenantURL = "https://domainname-admin.sharepoint.com"
# Import PowerShell Module
Import-Module Microsoft.Online.SharePoint.PowerShell -DisableNameChecking
# Connect to Tenant
Connect-SPOService -Url $TenantURL -Credential $User
# Connected

Beispiel

# Auslesen von Basis Informationen über jede Site Collection (ohne My Sites)
Get-SPOSite -Detailed | Export-CSV -LiteralPath C:\temp\SiteOverview.csv -NoTypeInformation

Event Log: Filter IIS Reset

Um in der Flut der Event Logs die IIS Resets einfacher zu identifizieren können diese mit einer Custom View (Filter) gefiltert werden. Dazu muss ein Filter mit den folgenden Eigenschaften erstellt werden:

Log: System
Event ID’s: 3201,3202,3203,3206

IIS Reset Event Log Filter

XML Konfiguration:

<QueryList>
  <Query Id="0" Path="System">
    <Select Path="System">*[System[(Level=1  or Level=2 or Level=3 or Level=4 or Level=0 or Level=5) and (EventID=3201 or EventID=3202 or EventID=3203 or EventID=3206)]]</Select>
  </Query>
</QueryList>

Carriage Return/Line Feed und Tabulator enfternen für Ansicht in Excel

Mit dem folgenden SQL Code können Carriage Return (CR) und Line Feeds (LF) entfernt werden. Dies ist z.B. hiflreich, wenn ich Daten vom SQL Server direkt in Excel anzeigen will. Entweder, wenn ich die Daten direkt innerhalb vom SQL Server Management Studio aus dem Results Tab mittels Copy/Paste in Excel transferieren will oder wenn ich z.B. direkt eine CSV-Datei, die mittels SQL Server erstellt wird, in Excel öffnen will. Damit Excel die Zuordnungen der Spalten richtig vornimmt und es keine Verschiebungen gibt, ist es notwendig, dass die entsprechenden Steuerzeichen im Inhalt bereits bei der Aufbereitung der Daten entfernt werden.

Wenn die Quelle mit einem Texteditor betrachtet wird (Beispiel CSV), sehen die Steuerzeichen zum Beispiel folgendermassen aus:

Carriage Return Line Feed

Bestehende CR/LF eliminieren und mit einem Komma ersetzen:

SELECT REPLACE(column_name, CHAR(13) + CHAR(10), ', ') FROM table_name;

CHAR(13): Carriage Return
CHAR(10): Line feed

Bestehende Tab (Tabulator-Zeichen) eliminieren und mit einem Leerzeichen ersetzen:

SELECT REPLACE(column_name, CHAR(9), ' ') FROM table_name;

CHAR(9): Tabulator

SQL Abfragen in SharePoint Content Datenbanken

Grundsätzlich ist es aus Sicht von Microsoft nicht erlaubt direkt Abfragen in den SQL Datenbanken von SharePoint Content Datenbanken durchzuführen. Dies unter anderem wegen der Gefahr von Deadlocks. Diese Gefahr kann aber mit dem Zusatz “With (NoLock)” umgangen werden.

Hier ein Beispiel einer Abfrage mit dieser Ergänzung:

Select * from dbo.AllDocs With (NoLock)

Überprüfung Workflow Manager Status

Mit Hilfe der untenstehenden PowerShell Befehle kann der Status der Workflow Manager Dienste überprüft werden.

Wichtig: Diese Befehle funktionieren nur auf einen Server, der Bestandteil einer Workflow Manager Farm ist.

Import-Module WorkflowManager
Get-WFFarmStatus

Beispiel:

HostName : Hostname.domain
ServiceName : WorkflowServiceBackend
ServiceStatus : Running

HostName : Hostname.domain
ServiceName : WorkflowServiceFrontEnd
ServiceStatus : Running

SharePoint 2007 Hyperlinks auslesen

Die Hyperlinks der SharePoint Anwender befinden sich unter SharePoint 2007 in der User Profile Datenbank. Mit Hilfe eines SQL-Statements können die gespeicherten Hyperlinks für alle Benutzer in der Farm einfach ausgelesen werden.

use SSP1_DB

SELECT [NTName], [PreferredName], [Title], [GroupType], [GroupTitle], [Url]
FROM [SP_SSP1_DB].[dbo].[UserLinks]
LEFT OUTER JOIN [UserProfile_Full] ON UserLinks.RecordId = UserProfile_Full.RecordID
ORDER BY PreferredName, Title

Access Datenbank: Verknüpfung mit spezifischem Symbol in der Taskbar (Windows 7/8)

Wenn Sie eine Verknüpfung für eine Access Datenbank in der Taskleiste von Windows 7/8 hinzufügen wollen, werden Sie feststellen, dass es nicht möglich ist ein eigenes Symbol für die Verknüpfung zu definieren. Es wird standardmässig das Access-Programm-Symbol angezeigt. Mit Hilfe der folgenden Anleitung können Sie ein spezifisches Symbol hinzufügen:

  1. Rechtsklick auf den Desktop und dort Neu > Verknüpfung auswählen
  2. Den folgenden Pfad eingeben (exemplarisch, Officepfad muss gegebenfalls angepasst werden):
    “C:\Program Files (x86)\Microsoft Office\Office12\MSACCESS.EXE” “\\ShareName\Datenbank.accde”
  3. Bezeichnung der Verknüpfung eingeben
  4. Der neu erstellten Verknüpfung ein passendes Icon zuweisen.
    Eine Auswahl von hilfreichen Icons befindet sich unter den folgenden DLL’s:
    %SystemRoot%\system32\SHELL32.dll
    %SystemRoot%\system32\imageres.dll
  5. Die neu erstellte Verknüpfung kann dann mit der Maus in die Taskbar hinzugefügt werden

 

Ändern SQL Collation in bestehender Datenbank

Mit Hilfe des nachfolgenden Scripts kann die bestehende Collation innerhalb allen Tabellenfeldern bzw. der ganzen Datenbank geändert werden. Im nachfolgenden Beispiel wird die Collation auf Latin1_General_CI_AI geändert.

--1. Change Collation of the Database
Alter database YourDatabase collate Latin1_General_CI_AI
 
USE [YourDatabase]
GO
 
declare
@NewCollation varchar(255)
,@Stmt nvarchar(4000)
,@DBName sysname
 
--2. Change Collation of every column of every table in the database
set @NewCollation = 'Latin1_General_CI_AI' -- change this to the collation that you need
set @DBName = DB_NAME()
declare
@CName varchar(255)
,@TName sysname
,@OName sysname
,@Sql varchar(8000)
,@Size int
,@Status tinyint
,@Colorder int
 
declare curcolumns cursor read_only forward_only local
 
for select
QUOTENAME(C.Name)
,T.Name
,QUOTENAME(U.Name) + '.' +QUOTENAME(O.Name)
,C.Prec
,C.isnullable
,C.colorder
from syscolumns C
inner join systypes T on C.xtype=T.xtype
inner join sysobjects O on C.ID=O.ID
inner join sysusers u on O.uid = u.uid
where T.Name in ('varchar', 'char', 'text', 'nchar', 'nvarchar', 'ntext')
and O.xtype in ('U')
and C.collation != @NewCollation
and objectProperty(O.ID, 'ismsshipped')=0
order by 3, 1
 
open curcolumns
 
SET XACT_ABORT ON
begin tran
fetch curcolumns into @CName, @TName, @OName, @Size, @Status, @Colorder
 
while @@FETCH_STATUS =0
begin
set @Sql='ALTER TABLE '+@OName+' ALTER COLUMN '+@CName+' '+@TName+ isnull ('(' +convert(varchar,@Size)+')', '') +' COLLATE '+ @NewCollation +' '+case when @Status=1 then 'NULL' else 'NOT NULL' end
exec(@Sql) -- change this to print if you need only the script, not the action
fetch curcolumns into @CName, @TName, @OName, @Size, @Status, @Colorder
end
 
close curcolumns
deallocate curcolumns
commit tran