Http://spbg.dk. SharePoint Bruger Gruppe Vi skal snakke om Status på SPBG Ny struktur på vores...

Preview:

Citation preview

SHAREPOINT BRUGER GRUPPE (SPBG)

http://spbg.dk

SharePoint Bruger Gruppe

DAGENS PROGRAM

Vi skal snakke om Status på SPBG Ny struktur på vores ERFA møder Andre møder Dagens emne: PowerShell i

SharePoint 2010

SharePoint Bruger Gruppe

STATUS PÅ SPBG

Praktisk information Lokaler, sodavand og sandwich bliver

sponseret af Enabling Danmark Lokaler

Vi mangler sponsorer til lokaler til vores ERFA møder

SharePoint Bruger GruppeNY STRUKTUR PÅ VORES ERFA MØDER Mere diskussion!

SharePoint Bruger Gruppe

DAGENS EMNE

PowerShell i SharePoint 2010 af Per Jakobsen

SharePoint Bruger Gruppe

ANDRE MØDER

SharePoint dinner inden jul, følg med på http://spbg.dk og twitter.

SharePoint Bruger Gruppe

PAUSE

SharePoint Bruger Gruppe

POWERSHELL AGENDA

Introduction to Powershell PowerShell and SharePoint 2010 Custom Cmdlet PowerShell and SharePoint 2007 Actions

Per Jakobsen

SharePoint Bruger Gruppe

A SHELL LIKE UNIX

chdir cd Set-Location ls dir Get-ChildItem cp copy Copy-Item erase del Remove-Item mkdir New-Item –type

directory cat type Get-Content

SharePoint Bruger Gruppe

A SHELL LIKE UNIX

Aliases History (History, r, F7, F8) Tab completion (incl. wildcard) Piping (|) Redirecting (>, >>, 2>, 2>>, 2>&1) Tee

SharePoint Bruger Gruppe

A SHELL LIKE UNIX

grep (Select-String) Immediate expressions

2+2 “Hello ” + “World” Beware type of left side wins

2 + “2” “2” + 2 2 + “test”

SharePoint Bruger Gruppe

BETTER THAN UNIX SHELL

Virtual drivesC:, D:,… Disk drivesENV: Environment variablesHKLM:, HKCU: RegistryVariable: Variables… Get-PSDrive

SharePoint Bruger Gruppe

BETTER THAN UNIX SHELL

Objects as long as possible

Get-Process |Where-Object {$_.Handles –lt 500} |Sort-Object CPU –desc |Select-Object –first 5

SharePoint Bruger Gruppe

BETTER THAN UNIX SHELL

Output formatting Format-Table Format-Table –auto

Format-List

SharePoint Bruger Gruppe

VARIABLES

Prefixed by $ Untyped by default, but can be typed

$a = 1$a = “test”[int]$a = 1$a = “test” Error$a = “2” OK, converted to int

SharePoint Bruger Gruppe

VARIABLES

Default scope when setting: At command line Global In script Script In function Local

When reading first defined of Local, script, global

Can be specified: $global:a = 42

SharePoint Bruger Gruppe

VARIABLES

One Variable to rule them all, One Variable to find them all,One Variable to bring them all and in darkness bind them $_1..10 | Where-Object {$_%2 –eq 1} |ForEach-Object {$_*$_}

SharePoint Bruger Gruppe

LITERALS (STRING)

"text" – expands: $var Content of variable $(expr) Value of expression ` used as escape character (NOT \)

'Text' – not expanding @ " <<newline>> to <<newline>> " @ - here

text

SharePoint Bruger Gruppe

LITERALS (NUMBERS)

1 Int32 / Int64 0x10 Int32/ Int64 (hexadecimal) 1.1 Double 1kb * by 1024 1mb * by 1024*1024 1gb * by 1024*1024*1024

SharePoint Bruger Gruppe

LITERALS (OTHER)

1,2,3 Array 1..10 Array (Range) @(1) Wraps in array if not already array @{a=1;b=2} HashTable [System.Enviroment] => Type

Use :: to access static methods/properties

{code} ScriptBlock (delegate)

SharePoint Bruger Gruppe

FUNCTION (SIMPLE)

Function sqr($x){

$x*$x;}Sqr 4Sqr(5)

SharePoint Bruger Gruppe

FILTER

Filter odd{

if ($_ % 2 –eq 1){$_}

}1..10 | odd

SharePoint Bruger Gruppe

FUNCTION (ADVANCED)

Function test($x){

begin {“B:Param $x”}process {“P:Param $x value $_”}end {“E:Param $x”}

}1..10|test(42)

SharePoint Bruger Gruppe

.NET

Everything in PowerShell is “just” .Net

Tab completion through reflection$d = [System.DateTime]::Now$d.AddDays(42)

SharePoint Bruger Gruppe

XML

Just casting a xml string to [xml] gives you a nice XmlDocument

$sols = [xml](stsadm –o enumsolutions)$sols.Solutions.Solution[0]$sols.Solutions.Solution |Where-Object {$_.Name –like “*stsadm*”}

SharePoint Bruger Gruppe

SECURITY

Secure out of the box Scripts (.ps1) are mapped to NotePad Current directory not in path (use .\xxx) By default doesn’t allow scripts

Change to allow local scripts:

Set-ExecutionPolicy RemoteSigned

SharePoint Bruger Gruppe

REMOTING

Enable-PSRemoting (once + restart) Interactive

BackgroundEnter-PSSession computer –Credential usr

$s = New-PSSession computer –Credential usrInvoke-Command $s { cmds }…Remove-Session $s

SharePoint Bruger Gruppe

SELF DOCUMENTING

Get-Help Get-Help <<cmd>>Get-Help about_*

Get-Command –noun sp*

$a | Get-Members[System.Math] | Get-Members -static

SharePoint Bruger Gruppe

PAUSE

SharePoint Bruger Gruppe

SHAREPOINT 2010

PowerShell knows nothing about SP2010

But “SP2010 Management Shell” does

Or

Add-SPShellAdmin (once)

Add-PSSnapIn Microsoft.SharePoint.Powershell

SharePoint Bruger Gruppe

SP2010: SITES

New-SPSite url –OwnerAlias usr –Template XXXGet-SPSite urlRemove-SPSite urlRemove-SPSite url –confirm:$false

New-SPWeb url –Template XXXGet-SPWeb urlGet-SPSite url | Get-SPWebRemove-SPWeb url

SharePoint Bruger Gruppe

SP2010: CONTENT

Get-SPWeb url | Select –Expand Lists | Select –Expand Items | Select Name, Url

(Get-SPWeb url).RecycleBin

SharePoint Bruger Gruppe

SP2010: LOGS

Get-SPLogEvent –StartTime time –EndTime time | Where-Object {$_.Correlation –eq “guid” } |Select Message

SharePoint Bruger Gruppe

SP2010: OBJECT MODEL

$web = Get-SPWeb url$web.Title$web.Title = “Title from PS”$web.Update()

SharePoint Bruger Gruppe

SP2010: OBJECT DISPOSAL

Start-SPAssigment -global$web = Get-SPWeb url…Stop-SPAssignment -global

$gc = Start-SPAssigment$web = $gc | Get-SPWeb url…Stop-SPAssignment $gc

SharePoint Bruger Gruppe

PAUSE

SharePoint Bruger Gruppe

CUSTOM CMDLET

Add Reference: System.Management.Automation.dll Microsoft.SharePoint.Powershell.dll

Inherit from SPXXXCmdletBase Add Attributes

Cmdlet SPCmdlet

Add xml files in SPRoot\Config\PowerShell

SharePoint Bruger Gruppe

SHAREPOINT 2007

PowerShell knows nothing about SP2007

But you can load the dll(s)

Then you can just use the object model

[System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.SharePoint”)

SharePoint Bruger Gruppe

SHAREPOINT 2007

$site = [Microsoft.SharePoint.SPSite] (“http://localhost”)$web = $site.OpenWeb()$web$web.Title$web.Title = “Updated from PS”$web.Update()$web.Dispose()$site.Dispose()

SharePoint Bruger Gruppe

USE PJA’S SP2007 STARTUP SCRIPT

To use PJA’s startup script do this once

Set-ExecutionPolicy RemoteSignedIf (!(Test-Path $profile)){New-Item –type file –force $profile}Notepad $profile<<copy/past from next slide>><<save>>. $profile

SharePoint Bruger Gruppe

PJA’S SP2007 STARTUP SCRIPTfunction Get-SPSite($url){ [Microsoft.SharePoint.SPSite]($url);}

# Setting up environment## Set up path for visual studio tools#function VsVars32(){ $vs100comntools = (Get-ChildItem env:VS100COMNTOOLS).Value $batchFile = [System.IO.Path]::Combine($vs100comntools, "vsvars32.bat") $cmd = "`"$batchfile`" & PATH" Set-Content env:\Path (cmd /c $cmd)[1].Split("=")[1]}VsVars32

# Setup path to SharePoint tools#New-Variable 12Hive "C:\Program Files\Common Files\Microsoft Shared\web server extensions\12" -option constantSet-Content Env:\Path ((Get-Content Env:\Path)+";$12Hive\bin;c:\windows\system32\inetsrv")

# Load SharePoint Assembly#[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

SharePoint Bruger Gruppe

ACTIONS

Use Get-Help Use Get-Command Use Get-Member

Get Started

SharePoint Bruger Gruppe

ANDRE MØDER

SharePoint dinner inden jul, følg med på http://spbg.dk og twitter.

Recommended