Hvis man har ødelagt NTFS rettighederne på Folderredirection sharet, er man i en ulykkelig situation, hvis man har mere end 10 brugere. Men har fundet dette powershell-script jeg godt vil dele.

For hver undermappe (%username%) udføre dette Powershell script følgende:
– Sætter Administrators som Ejer af folder (undermapper og filer)
– Sætter mappe til at nedarve rettigheder, og sletter tidligere settings
– Sætter bruger (baseret på foldernavn) og giver fuld adgang til folder, filer og undermapper
– Retter ejer af folder til bruger (baseret på foldernavn)



<#
Script to reset user folder permissions.
Uses: icacls.exe and takeown.exe

For all folders in base folder:
1. Recursively resets owner to Administrators
2. Reset folder to inherit permissions and apply to subfolders/files, clearing any existing perms
3. Add user (based on folder name) with full control and apply to subfolders/files
4. Recursivley reset owener to user (based on folder name)
#>

$mainDir = "D:\FolderRedirection"
write-output $mainDir
$dirs = gci "$mainDir" |? {$_.psiscontainer}
foreach ($dir in $dirs){
write-output $dir.fullname
takeown.exe /F $($dir.fullname) /R /D Y |out-null
icacls.exe $($dir.fullname) /reset /T /C /L /Q
icacls.exe $($dir.fullname) /grant ($($dir.basename) + ':(OI)(CI)F') /C /L /Q
icacls.exe $($dir.fullname) /setowner $($dir.basename) /T /C /L /Q
}


Når brugere sletter filer i Exchange, ligger det i Dumpster’en i en defineret periode. Det giver god mening at tømme den, hvis man har pladsproblemer eller der af andre årsager ligger for meget data i Exchange. En af problemerne i exchange, er at pladsen ikke frigives når brugeren har slettet data og det er forældet i exchange dumpsteren

Hvor meget data ligger i Exchange Dumpster totalt:

Get-MailBox | Get-MailboxStatistics | select DisplayName,TotalDeletedItemSize

Hvor meget plads benyttes til slettet post på den enkelte bruger:

Get-MailboxStatistics  | select DisplayName,TotalDeletedItemSize

Hvor meget white-space er tilgængeligt:

Get-MailboxDatabase -Status | Sort-Object DatabaseSize -Descending | Format-Table Name, DatabaseSize, AvailableNewMailboxSpace

Microsoft har valgt ikke at lave en kommando der bare tømmer dumpsteren. I stedet skal man lave en søgning på indhold der kun ligger i dumpsteren, og så slette det den finder. Det gøres med denne kommando:

Search-mailbox -identity  -SearchDumpsterOnly -DeleteContent

En kunde kunne pludseligt ikke åbne .PDF filer, efter de havde gemt filer i en bestemt netværks-mappe. Fejlen i Acrobat Reader var “access violation”, hvilket ikke gjorde fejlsøgning nemmere. Et hurtigt kig viste den relative sti til filen, var meget over de 260 der er Microsofts grænse. Næste trin var at få et overblik over situationen på hele serveren, så jeg startede med at se på hvad Powershell kunne via. Get-ChildItem -Recurse. Helt nøjagtigt ville jeg sprøjte den ud som HTML, så jeg ikke skulle tænke på formatering.

Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | Select-Object FullName | ConvertTo-Html | Out-File LongPath001.html

Problem: catch-22
Men hvordan får du Powershell til at browse en folder, hvor stien er længer end Windows maksimale sti-længde? Det gør man ikke umiddelbar, for du får en PathTooLongException fejl.

Løsning: Robocopy
Det elskede værktøj har ikke samme begrænsninger. Så tanken var; Simuleret kopi + logfile + unicode for at få ÆØÅ med i logfilen.

robocopy c:\windows NULL /L /E /NJH /FP /NC /NDL /XJ /R:0 /W:0 /UNILOG:LongPath001.txt

longpathnameoutput

Kundeservice:
Vil man være sød ved sin kunde, kan lægge data i Excel og fortæller hvor lang tekst-strengen er. Jeg brugte =LEN(B2) eller =LÆNGDE(B2) i den dansk Excel.
longpathnameoutput2

Opdater help information
update-help

Find filer via. Powershell
Get-ChildItem -Path "c:\data" -Include "*.txt" -Recurse -Force | select FullName

Find filer via. Powershell og flyt/kopier dem
Get-ChildItem -Path "c:\data" -Include "*metr*" -Recurse -Force | Copy-Item -Destination "O:\test"

Get IP info
Get-NetIPConfiguration

Set IP
New-NetIPAddress -InterfaceAlias "Ethernet"
- IPAddress 192.168.0.20 -PrefixLength 24
- DefaultGateway 192.168.0.1

Set DNS
Set-DNSClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses 192.168.1.1

Tilføj computer til domain
Add-Computer -DomainName Fam.local

Ping med traceroute information
Test-NetConnection 8.8.8.8 -traceroute

Test forbindelse til port
Test-NetConnection sitec.dk -port 80

Fix domain partnership
Test-ComputerSEcurechannel -credential domain\admin -repair

Træk data fra System eventlog med type Error
Get-eventlog -logname System -EntryType Error
… samme hvor kilden indeholder navnet navnet Service
Get-EventLog -LogName System -EntryType Error -Source *service* | out-gridview
… samme hvor kilden indeholder navnet navnet Citrix
Get-EventLog -LogName System -EntryType Error -Source *citrix* | out-gridview

List services
Get-Service -DisplayName *windows*

List Powershell cmdlets tilgængelige der indeholder navnet service
Get-Command -Noun service
… samme med navnet process
Get-Command -Noun process

Hvilken services er stoppet
Get-Service | Where-Object {$_.status -eq "stopped"}
Hvilken services starter sutomatisk
Get-Service | Where-Object {$_.StartType -eq "automatic" }
Hvilken services er stoppet, med startuptype automatic
Get-Service | Where-Object {$_.status -eq "stopped" -and $_.StartType -eq "automatic" }

Hvilken Hotfix er installeret
get-hotfix
Er et specifikt hotfix installeret
get-hotfix -id KB3139907
Er to specifikke hotfixes installeret
get-hotfix -id KB3139907, KB3142588

List all accounts med password er ikke udløber
Search-ADaccount -PasswordNeverExpires

List accounts der ikke har været logget på de sidste 90 dage og 24 timer
Search-ADaccount -accountinactive -timespan 90.00:00:00

List alle konti der er låst ude
Search-adaccount -lockedout

List alle konti der er disabled
Search-adaccount -accountDisabled

List alle IIS site bindings
Import-Module Webadministration
Get-ChildItem -Path IIS:\Sites

Fik behov for at logge og overvåge en server jeg ikke måtte installere nogen applikation på, så jeg lavede dette lille PowerShell Script jeg gerne vil dele med verden.

Simple Ps Ping

Ide bag kode:
– Overvåg forbindelsen til en host
– Log resultatet i en tekstfil
– Gem logfil navngivet som den server man overvåger (eks. Mailserver01.log)
der senere kan vaskes i et spreadsheet eller importeres i Splunk

For at gøre den nemmere at andvende i dagligdagen, fortæller scriptet hvad den gør og hvor den lægger filen bagefter.

OBS: Husk at enten oprette folderen eller rette stien til logfilen!

Kode:
SimplePsPing.ps1 (txt format)

Skal du måle oppetid via PowerShell, kan det gøres ved at trække tidspunktet for sidste boot ud på denne måde:

PoweShell Input
Get-CimInstance -ClassName win32_operatingsystem | select csname, lastbootuptime

Output:
boottime

Er Remote PowerShell tilgængeligt på dit netværk, kan du få data tilbage fra flere servere på en gang. Dette er koden hvis serverne hedder SRV01 og SRV02
invoke-command -computername SRV01, SRV02 {Get-CimInstance -ClassName win32_operatingsystem | select csname, lastbootuptime}

Hvis man overvåger sin diskkapacitet via en scriptet løsning, kan dette løses gennem PowerShell via denne enkelte linie der lister alle volumes. Scriptet virker ved at fremskaffe informationerne gennem WMI og Get-WmiObject er en PowerShell Cmdlet du vi elske 🙂

PowerShell Input:
get-wmiobject Win32_volume |select Name,Capacity,Freespace

Output:
Diskkapacitet via. powershell