Posted in Windows Powershell | No Comment | 1,509 views | 28/05/2015 10:54
Following script will get System Logs in last hour.
1
2
3
4
5
6
7
8
9
| # System Log Parameters
$SystemLogParameters = @{
LogName= "System"
EntryType= "Error","Warning"
After= (Get-Date).AddHours(-1)
}
# Get System Logs
Get-EventLog @SystemLogParameters |
# System Log Parameters
$SystemLogParameters = @{
LogName= "System"
EntryType= "Error","Warning"
After= (Get-Date).AddHours(-1)
}
# Get System Logs
Get-EventLog @SystemLogParameters
You can set scope by changing EntryType parameter.
Posted in Windows Powershell | No Comment | 1,588 views | 28/05/2015 10:51
Following script will get Application Logs in last hour with “vmic*” source logs.
1
2
3
4
5
6
7
8
9
| # Application Log Parameters
$ApplicationLogParameters = @{
LogName= "Application"
EntryType= "Error","Warning"
After= (Get-Date).AddHours(-1)
}
# Get Application Logs
Get-EventLog @ApplicationLogParameters -Source vmic* |
# Application Log Parameters
$ApplicationLogParameters = @{
LogName= "Application"
EntryType= "Error","Warning"
After= (Get-Date).AddHours(-1)
}
# Get Application Logs
Get-EventLog @ApplicationLogParameters -Source vmic*
You can set scope by changing EntryType parameter.
Posted in Windows Powershell | 4 Comments | 7,373 views | 28/05/2015 10:47
Following creates a new event log folder called “yusufozturk” in your Application Log Folder.
1
2
3
4
5
| # Create Event Log
New-EventLog -LogName "yusufozturk" -Source "Hyper-V" -EA SilentlyContinue
# Limit Event Log Properties
Limit-EventLog -LogName "yusufozturk" -OverflowAction "OverWriteAsNeeded" -MaximumSize 100MB -EA SilentlyContinue |
# Create Event Log
New-EventLog -LogName "yusufozturk" -Source "Hyper-V" -EA SilentlyContinue
# Limit Event Log Properties
Limit-EventLog -LogName "yusufozturk" -OverflowAction "OverWriteAsNeeded" -MaximumSize 100MB -EA SilentlyContinue
As you see, you can also set OverFlowAction and MaximumSize.
Posted in Windows Powershell | No Comment | 2,808 views | 27/05/2015 18:00
As you know, LoadWithPartialName is now deprecated. So you need to change your codes.
You should use Add-Type instead of LoadWithPartialName. This is example alternative for that:
Add-Type -Path "C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll" |
Add-Type -Path "C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll"
That will load DLL into PowerShell session. So you have to specify full path now.
Then you can use it like:
New-Object Microsoft.Web.Administration.ServerManager |
New-Object Microsoft.Web.Administration.ServerManager
Now you can start exploring IIS using with Add-Type :)
Posted in Windows Powershell | No Comment | 1,195 views | 16/05/2015 13:48
These are IIS Application Pool Limits that you can get using CIM via PowerShell.
1
2
3
4
5
6
7
8
9
10
11
12
| # WebSite AppPool Information
$WebSiteAppPools = Get-CimInstance -Namespace "root\MicrosoftIISv2" -ClassName "IIsApplicationPoolSetting" -OperationTimeoutSec 15 -EA Stop
$WebSiteAppPool = $WebSiteAppPools[0];
# IIS AppPool Limits Information
[string]$WebSiteAppPoolAppPoolState = $WebSiteAppPool.AppPoolState
[string]$WebSiteAppPoolCPUAction = $WebSiteAppPool.CPUAction
[string]$WebSiteAppPoolCPULimit = $WebSiteAppPool.CPULimit
[string]$WebSiteAppPoolCPUResetInterval = $WebSiteAppPool.CPUResetInterval
[string]$WebSiteAppPoolDisallowOverlappingRotation = $WebSiteAppPool.DisallowOverlappingRotation
[string]$WebSiteAppPoolDisallowRotationOnConfigChange = $WebSiteAppPool.DisallowRotationOnConfigChange |
# WebSite AppPool Information
$WebSiteAppPools = Get-CimInstance -Namespace "root\MicrosoftIISv2" -ClassName "IIsApplicationPoolSetting" -OperationTimeoutSec 15 -EA Stop
$WebSiteAppPool = $WebSiteAppPools[0];
# IIS AppPool Limits Information
[string]$WebSiteAppPoolAppPoolState = $WebSiteAppPool.AppPoolState
[string]$WebSiteAppPoolCPUAction = $WebSiteAppPool.CPUAction
[string]$WebSiteAppPoolCPULimit = $WebSiteAppPool.CPULimit
[string]$WebSiteAppPoolCPUResetInterval = $WebSiteAppPool.CPUResetInterval
[string]$WebSiteAppPoolDisallowOverlappingRotation = $WebSiteAppPool.DisallowOverlappingRotation
[string]$WebSiteAppPoolDisallowRotationOnConfigChange = $WebSiteAppPool.DisallowRotationOnConfigChange
You can find more properties in my blog.
Posted in Windows Powershell | No Comment | 1,394 views | 04/05/2015 17:23
These are IIS Website Logging properties that you can get using CIM via PowerShell.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| # Get WebSites
$WebSites = Get-CimInstance -Namespace "root\MicrosoftIISv2" -ClassName "IIsWebServerSetting" -OperationTimeoutSec 15 -EA Stop
$WebSite = $WebSites[0];
# WebSite Log Information
[string]$WebSiteLogFormat = $WebSite.LogType
[string]$WebSiteLogDirectory = $WebSite.LogFileDirectory
[string]$WebSiteLogPeriod = $WebSite.LogFilePeriod
[string]$WebSiteLogTruncateSize = $WebSite.LogFileTruncateSize
[string]$WebSiteLogLocalTimeRollover = $WebSite.LogFileLocaltimeRollover
[string]$WebSiteLogState = $WebSite.DontLog
[string]$WebSiteLogExtFileBytesRecv = $WebSite.LogExtFileBytesRecv
[string]$WebSiteLogExtFileBytesSent = $WebSite.LogExtFileBytesSent
[string]$WebSiteLogExtFileClientIp = $WebSite.LogExtFileClientIp
[string]$WebSiteLogExtFileComputerName = $WebSite.LogExtFileComputerName
[string]$WebSiteLogExtFileCookie = $WebSite.LogExtFileCookie
[string]$WebSiteLogExtFileDate = $WebSite.LogExtFileDate
[string]$WebSiteLogExtFileFlags = $WebSite.LogExtFileFlags
[string]$WebSiteLogExtFileHost = $WebSite.LogExtFileHost
[string]$WebSiteLogExtFileHttpStatus = $WebSite.LogExtFileHttpStatus
[string]$WebSiteLogExtFileHttpSubStatus = $WebSite.LogExtFileHttpSubStatus
[string]$WebSiteLogExtFileMethod = $WebSite.LogExtFileMethod
[string]$WebSiteLogExtFileProtocolVersion = $WebSite.LogExtFileProtocolVersion
[string]$WebSiteLogExtFileReferer = $WebSite.LogExtFileReferer
[string]$WebSiteLogExtFileServerIp = $WebSite.LogExtFileServerIp
[string]$WebSiteLogExtFileServerPort = $WebSite.LogExtFileServerPort
[string]$WebSiteLogExtFileSiteName = $WebSite.LogExtFileSiteName
[string]$WebSiteLogExtFileTime = $WebSite.LogExtFileTime
[string]$WebSiteLogExtFileTimeTaken = $WebSite.LogExtFileTimeTaken
[string]$WebSiteLogExtFileUriQuery = $WebSite.LogExtFileUriQuery
[string]$WebSiteLogExtFileUriStem = $WebSite.LogExtFileUriStem
[string]$WebSiteLogExtFileUserAgent = $WebSite.LogExtFileUserAgent
[string]$WebSiteLogExtFileUserName = $WebSite.LogExtFileUserName
[string]$WebSiteLogExtFileWin32Status = $WebSite.LogExtFileWin32Status |
# Get WebSites
$WebSites = Get-CimInstance -Namespace "root\MicrosoftIISv2" -ClassName "IIsWebServerSetting" -OperationTimeoutSec 15 -EA Stop
$WebSite = $WebSites[0];
# WebSite Log Information
[string]$WebSiteLogFormat = $WebSite.LogType
[string]$WebSiteLogDirectory = $WebSite.LogFileDirectory
[string]$WebSiteLogPeriod = $WebSite.LogFilePeriod
[string]$WebSiteLogTruncateSize = $WebSite.LogFileTruncateSize
[string]$WebSiteLogLocalTimeRollover = $WebSite.LogFileLocaltimeRollover
[string]$WebSiteLogState = $WebSite.DontLog
[string]$WebSiteLogExtFileBytesRecv = $WebSite.LogExtFileBytesRecv
[string]$WebSiteLogExtFileBytesSent = $WebSite.LogExtFileBytesSent
[string]$WebSiteLogExtFileClientIp = $WebSite.LogExtFileClientIp
[string]$WebSiteLogExtFileComputerName = $WebSite.LogExtFileComputerName
[string]$WebSiteLogExtFileCookie = $WebSite.LogExtFileCookie
[string]$WebSiteLogExtFileDate = $WebSite.LogExtFileDate
[string]$WebSiteLogExtFileFlags = $WebSite.LogExtFileFlags
[string]$WebSiteLogExtFileHost = $WebSite.LogExtFileHost
[string]$WebSiteLogExtFileHttpStatus = $WebSite.LogExtFileHttpStatus
[string]$WebSiteLogExtFileHttpSubStatus = $WebSite.LogExtFileHttpSubStatus
[string]$WebSiteLogExtFileMethod = $WebSite.LogExtFileMethod
[string]$WebSiteLogExtFileProtocolVersion = $WebSite.LogExtFileProtocolVersion
[string]$WebSiteLogExtFileReferer = $WebSite.LogExtFileReferer
[string]$WebSiteLogExtFileServerIp = $WebSite.LogExtFileServerIp
[string]$WebSiteLogExtFileServerPort = $WebSite.LogExtFileServerPort
[string]$WebSiteLogExtFileSiteName = $WebSite.LogExtFileSiteName
[string]$WebSiteLogExtFileTime = $WebSite.LogExtFileTime
[string]$WebSiteLogExtFileTimeTaken = $WebSite.LogExtFileTimeTaken
[string]$WebSiteLogExtFileUriQuery = $WebSite.LogExtFileUriQuery
[string]$WebSiteLogExtFileUriStem = $WebSite.LogExtFileUriStem
[string]$WebSiteLogExtFileUserAgent = $WebSite.LogExtFileUserAgent
[string]$WebSiteLogExtFileUserName = $WebSite.LogExtFileUserName
[string]$WebSiteLogExtFileWin32Status = $WebSite.LogExtFileWin32Status
You can find more properties in my blog.
Posted in Windows Powershell | No Comment | 3,345 views | 23/04/2015 16:34
** This is alternative custom script to Compress-Archive for wide range compatibility **
I’ve recently installed Windows Server 2016 as Core installation. Due to there is no shell, my old PowerShell script didn’t work:
1
2
3
4
5
6
7
8
| $ShellApplication = New-Object -com Shell.Application
$ZipPackage = $ShellApplication.NameSpace($ZipPath)
foreach($File in $input)
{
$ZipPackage.CopyHere($File.FullName)
Start-Sleep -milliseconds 5
} |
$ShellApplication = New-Object -com Shell.Application
$ZipPackage = $ShellApplication.NameSpace($ZipPath)
foreach($File in $input)
{
$ZipPackage.CopyHere($File.FullName)
Start-Sleep -milliseconds 5
}
As you see, I’ve used Shell Application before. But now, I’m not able to run that on Server 2016 Core.
So I searched on internet about it and found MVP Jeffrey Hick‘s post:
I used that codes and made a zip function:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
| function ConvertTo-CompressedFile
{
param([string]$ZipPath)
# Get Files
[string[]]$Files = $input.FullName;
if ($Files -ne $Null)
{
# Load the assembly
[System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") | Out-Null
# Check Zip Extension
if ($ZipPath -notlike "*.zip")
{
Write-Output "Please check your zip file path."
break;
}
# Check Zip Path
if(-not (Test-Path($ZipPath)))
{
# Get Zip File Name
$ZipName = $ZipPath.Split("\")[-1]
if ($ZipPath -notlike "*\*")
{
# Get Current Location
$CurrentLocation = (Get-Location).Path
# Get Current Zip File Path
$CurrentZipPath = $CurrentLocation + "\" + $ZipName
# Update Zip Path
$ZipPath = $CurrentZipPath;
}
# Create Zip File
Set-Content $ZipPath ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
# Set File Attributes
(Get-ChildItem $ZipPath).IsReadOnly = $false
}
# Get Zip File
$ZipFile = [System.IO.Compression.ZipFile]::Open($ZipPath,"Update")
foreach($File in $Files)
{
# Get File Name
$FileName = $File.Split("\")[-1]
# Compress File
[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($ZipFile,$File,$FileName,"optimal") | Out-Null
# Buffer
Start-Sleep -milliseconds 5
}
# Close Zip File
$ZipFile.Dispose()
# Output Zip Path
$ZipPath
}
} |
function ConvertTo-CompressedFile
{
param([string]$ZipPath)
# Get Files
[string[]]$Files = $input.FullName;
if ($Files -ne $Null)
{
# Load the assembly
[System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") | Out-Null
# Check Zip Extension
if ($ZipPath -notlike "*.zip")
{
Write-Output "Please check your zip file path."
break;
}
# Check Zip Path
if(-not (Test-Path($ZipPath)))
{
# Get Zip File Name
$ZipName = $ZipPath.Split("\")[-1]
if ($ZipPath -notlike "*\*")
{
# Get Current Location
$CurrentLocation = (Get-Location).Path
# Get Current Zip File Path
$CurrentZipPath = $CurrentLocation + "\" + $ZipName
# Update Zip Path
$ZipPath = $CurrentZipPath;
}
# Create Zip File
Set-Content $ZipPath ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
# Set File Attributes
(Get-ChildItem $ZipPath).IsReadOnly = $false
}
# Get Zip File
$ZipFile = [System.IO.Compression.ZipFile]::Open($ZipPath,"Update")
foreach($File in $Files)
{
# Get File Name
$FileName = $File.Split("\")[-1]
# Compress File
[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($ZipFile,$File,$FileName,"optimal") | Out-Null
# Buffer
Start-Sleep -milliseconds 5
}
# Close Zip File
$ZipFile.Dispose()
# Output Zip Path
$ZipPath
}
}
So you can easily compress any file on Windows Server 2016.
Usage:
Get-ChildItem MyFile.txt | ConvertTo-CompressedFile C:\MyFile.zip |
Get-ChildItem MyFile.txt | ConvertTo-CompressedFile C:\MyFile.zip
Also it works for current directories:
Get-ChildItem MyFile.txt | ConvertTo-CompressedFile MyFile.zip |
Get-ChildItem MyFile.txt | ConvertTo-CompressedFile MyFile.zip
If zip file is not exist, that will be created by this script.
Note: This script requires .Net 4.5 Core installed on Windows Server 2016.
|