by Eddie
9. December 2014 10:33
在管理Server上常遇到的問題就是空間不足的狀況,而在整理資料上如果做好計畫的話,
通常在Server之中就會有一堆不知道是誰或者何時建立的檔案,
最近有客戶希望可幫他們設定Windows Backup,
並且提出了希望可以定期的將這些備份檔案給移除的需求。
所以今天就來分享一個實用的PowerShell指令,
這個指令是透過查詢檔案的最後寫入日期來做依據,只要超出一定的時間就會將檔案移除或移動。
以下面這一個我在D磁碟區所建立的Temp資料夾為例,裡面有三個不同的檔案。
其中有一個Word文件是已經超過7天的文件,我希望超出7天的檔案可以被自動移除。
首先我們可以透過下列指令來檢查,這三個檔案的最後寫入日期
Get-ChildItem D:\Temp -Recurse
並透過下列指令將超過7天的檔案來進行移除的動作
$Today = Get-Date
$Days = “-7”
$TargetFolder = “D:\Temp”
$LastWrite = $Today.AddDays($Days)
Get-ChildItem $TargetFolder -Recurse | Where {!$_.PSIsContainer}| where {$_.LastWriteTime -le "$LastWrite"} | Remove-Item
之後在回到D:\Temp的資料夾中,就可以看到原本那一個超過7天的Word檔案已經被移除。
參考資料
Using the Get-ChildItem Cmdlet
by Eddie
24. November 2014 09:06
這幾天在朋友的FB看到一句話,心裡還蠻有感覺的
他說「企業的IT人員最終目標 : 最終讓自已沒有工作.什麼都要自動化」
這也是最近一直在研究的工作,透過指令減輕自己的負擔,讓大多數的工作可以優化。
防火牆一直是伺服器維運的重點,而Windows Firewall則會本篇說明的主要對象
1. 啟用目前以有的規則,以下面的指令為例,
會啟用「遠端桌面 – 使用者模式 (TCP-In)」這個防火牆規則,
並且設定只有「192.168.0.100」的IP才能連線。
不過要知道完整的防火牆顯示名稱才會設定成功。
由於防火牆規則很多,要記住全部的防火牆名稱不太可能,
所以建議可以以新建的規則來取代目前以存在的規則。
Set-NetFirewallRule -DisplayName "遠端桌面 – 使用者模式 (TCP-In)"
–RemoteAddress "192.168.0.100 " -Enabled True
2. 新增防火牆規則的語法如下
New-NetFireWallRule
–DisplayName ‘ Remote Desktop Service(TCP-In)’ :防火牆規則的顯示名稱
–direction Inbound :設定是在輸入或輸出規則
–Protocol TCP :設定通訊協定類型
–RemotePort 3389 :設定指定的Port
–RemoteAddress 192.168.0.100 :限定只能用特定IP連線
-Profile any (Private, Public, Domain) 選擇讓私人,公開或者網域的連線可以套用這個規則,
或者設定Any讓全部的連線都可以使用。
-Progarm “應用程式路徑” 限定只能用特定應用程式才能使用這個Port。
優點是可以不用記住目前在Windows 防火牆中的規則名稱,
可以自訂服務內容,缺點是需要輸入較多的設定。
參考網頁:http://technet.microsoft.com/zh-tw/LIBRARY/jj554908.aspx
:http://technet.microsoft.com/zh-tw/LIBRARY/jj573834.aspx
by Eddie
7. November 2014 11:41
在實務上目前大多數所遇到的客戶伺服器都是使用虛擬機器來建立,
而目前如果有購買Windows Server 2012 Standard的授權的話,
每台Server都可以有兩台Hyper-V虛擬機器的授權,
如果是Datacenter版本的授權的話則是不受限制。
這幾年使用Hyper-V來建立虛擬機器的情況也越來越多,
所以今天來分享一下如何用指令建立Hyper-V的虛擬機器,
並且可以自訂電腦名稱、VHDX存放位置、RAM大小、
磁碟空間大小、設定檔與快照的位置。
指令如下:
New-VM –Name “TestVM”–MemoryStartupBytes 4096MB
–NewVHDPath F:\Hyper-V\TestVM\TestVM.vhdx
–NewVHDSizeBytes 100GB -Path F:\Hyper-V\TestVM
New-VM –Name “TestVM”
這個是開始建立新的虛擬機器,
-Name的參考請帶入虛擬機器的設定名稱。
–MemoryStartupBytes 4096MB
透過 –MemoryStartupBytes 可以設定虛擬機器的記憶體大小,
單位則是以MB為主。
–NewVHDPath F:\Hyper-V\TestVM\TestVM.vhdx
這個-NewVHDPath的參數則是可以指定虛擬機器硬碟的存放位置,
目前格式只能使用vhdx,輸入舊的vhd格式則是會報錯
–NewVHDSizeBytes 100GB
而-NewVHDSizeBytes的參數則是可以設定虛擬硬碟的容量大小,單位以GB為主。
-Path F:\Hyper-V\TestVM
而為了未來的管理,建議指定虛擬機器的設定檔與快照檔案的存放位置,
透過-Path這個參數可以指定這兩個檔案所存放的位置。
參考文件:
微軟授權三秒教
Create a New Virtual Machine with PowerShell
TechNet New-VM
by Eddie
3. October 2014 16:59
在接下一些伺服器維運工作之後,常有客戶想知道硬體運作的狀況
比如說:硬碟的I/O、CPU的平均使用量,硬碟空間等等的資訊
這些資訊當然都可以從UI介面上透過設定還顯示
但不僅麻煩也需要花上一點時間,我今天分享的是透過PowerShell指令來顯示本機的磁碟資訊
包括了硬碟數量、磁區代號、總空間、剩餘空間、硬碟類型等資訊。
PoWerShell指令如下:
gwmi Win32_LogicalDisk -Filter "DriveType=3" |
select Name, FileSystem,FreeSpace,BlockSize,Size |
%{$_.BlockSize=(($_.FreeSpace)/($_.Size))*100;$_.FreeSpace=($_.FreeSpace/1GB);$_.Size=($_.Size/1GB);$_} |
Format-Table Name,
@{n='FS';e={$_.FileSystem}},
@{n='Free, Gb';e={'{0:N2}'-f $_.FreeSpace}},
@{n='Free,%';e={'{0:N2}'-f $_.BlockSize}},
@{n='Capacity ,Gb';e={'{0:N3}' -f $_.Size}} –AutoSize
不過上述的動作也只是檢查目前硬碟空間的剩餘資訊而已
最終還需要系統可以自動化的發出警告或通知
這才是硬體維運的目標,所以透過下面的PowerShell指令
我設定為只要有硬碟空間小於百分之10的情況下,以SMTP Server寄信通知收件者
指令如下
$mythreshold = 10
$freespace = gwmi Win32_LogicalDisk -Filter "DriveType=3" | select Name, FileSystem,FreeSpace,BlockSize,Size
ForEach($item in $freespace)
{
$item.BlockSize=(($item.FreeSpace)/($item.Size))*100
$item.FreeSpace=($item.FreeSpace/1GB)
$item.Size=($item.Size/1GB)
if ($item.BlockSize -lt $mythreshold){
$from = "
[email protected]"
$to = "
[email protected]"
$subject = "Low Disk Space!"
$body = "Free Space Remaining: " + "<p></p>磁碟總容量(GB):" + $item.size + "<p></p>剩餘空間(GB):" + $item.FreeSpace + "<p></p>磁區:" + $item.name + "<p></p>剩餘百分比:" + $item.BlockSize +"%"
$smtpServer = "192.168.2.3"
Send-MailMessage -From $from -to $to -Subject $subject -Body $body -SmtpServer $smtpServer -BodyAsHtml -Encoding UTF8
}
}
參考文件
Win32_LogicalDisk class
Chkdsk method of the Win32_LogicalDisk class