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
by Eddie
26. September 2014 12:44
透過PowerShell來管理Office 365
有時候替客戶管理Office 365時網頁式的管理平台有些事情做無法達成
這時候PowerShell的介面就是一個很好的工具,
而透過PowerShell的登入Office 365的說明網路上有很多,我這邊就不在多敘述,
今天要來介紹的是如何在登入Office 365時可以使用最新的PowerShell指令
並分享我所遇過在網頁管理平台做不到。
必須要使用PowerShell才能達成的指令。
1. 再透過PowerShell登入Office 365之後
為了確保目前使用的指令符合Office 365以及更新本機上的版本,
輸入下列指令,AllowRedirection 可讓全世界資料中心的雲端架構組織使用相同的URL,
並將 Windows PowerShell 連線到 Office 365 雲端架構服務。
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/ powershell/ -Credential $LiveCred -Authentication Basic –AllowRedirection
2. 之後為了將將用於 Office 365 雲端架構服務的命令匯入至本機電腦的用戶端工作階段,
請輸入下列指令,完成後您就可以開始在 PowerShell 執行命令進行操作。
PowerShell 才能完成的工作有不少,我自己遇到的是一個郵件重新導向的規則
必須要透過PowerShell的方式來設定,雖然在使用者個郵件規則中是有這個設定
但是如果要重新導向的帳號是外部帳號的話,就要使用PowerShell來設定。
如果使用者有將郵件重新導向至外務帳號的需求的話,請輸入下列的指令
New-InboxRule -Name "MailRedirect" -Mailbox XXX -RedirectTo
[email protected]
其中XXX代表的是在Office 365中使用者的名稱,
[email protected]是要重新導向的E-mail帳號。
完成之後就會如下圖所示,新增了一個規則在這個XXX的使用者帳號中
使用PowerShell來管理的好處很多,快速方便,有錯誤的話也可以有比較明顯的提示,
在這邊分享自己的一點小心得,有任何問題也歡迎一起來討論。
參考文件
方便管理及部署 Office 365 的 Windows PowerShell Cmdlet
Use PowerShell to Manage Office 365 Users
by Joseph Wu
13. October 2011 19:13
繼上一篇 PowerShell 遠端操控 server,我又在嘗試於 Workgroup + Domain 的環境下,該如何使用遠端操作。
在說明設定之前,我想提及一個重要的觀念,也就是遠端操控到底是如何運作的 ?
這是我之前上蘇建榮老師的課所得知的知識,分享如下:
一、遠端管理
這是第一種方式,也是傳統的方式,使用 RPC 來進行。
ex: Get-WMIObject Win32_LogicalDisk –ComputerName <ServerName>
二、遠端執行
建議使用的方式,是透過 WinRM 服務進行。 其實原理就是,將命令傳給另一個 server 來執行。
ex: Invoke-Command …….
那我們該如何設定呢 ? 本篇先說明一種最簡單快速的方式 → 安裝 Server 完畢後,將 Administrator 設定同樣的密碼,就可以立即使用 。 (結束)
有沒有覺得很無言………….。雖說簡單,但是我們必須知道為什麼可以這麼做。
原因有二: (1) RPC 服務一定是被開啟的 (2) 防火牆預設是有針對 RPC 服務開啟的
被選擇的防火牆規則,即是可以使用遠端操控的關鍵之一,我們點右鍵按內容來看詳細資訊,即發現此規則,即為上一篇所提及的,是開啟 RPC 動態連接埠 + svhost.exe 這支程式。
不過這有個小細節要注意,就是這招只能使用在 administrator 的帳戶之下,就連加入 administrators 群組的帳戶一樣無法使用,如下圖:
如果要使用不同帳戶的話,必須增加 2 個設定:(可參考 Remote WMI to a Workgroup Server 2008 R2 這篇文章)
1、開啟遠端使用 com 元件
(1)
(2)
(3)
2、 WMI Control 的安全性設定
(1)
(2)
(3)
我設定完之後,測試無誤。但發現, powershell 的回應速度有變慢。
另外,如果是 Domain 、 WorkGroup 混用的環境中,也是同樣可以使用的,只要帳號密碼一樣、防火牆設定正確,即可使用。
by Joseph Wu
4. October 2011 16:19
最近在嘗試使用 PowerShell 遠端操控 server ,有些心得分享如下:
1、在非 domain 的環境下 (WORKGROUP) , 除了開啟防火牆外,還需要憑證
2、在 domain 的環境下,防火牆開啟 「RPC 動態對應連接埠」 or 「svhost.exe」即可
我的所有電腦都是加入 domain 的環境
另外,有時候我覺得納悶,為何有時候我防火牆什麼都沒設定,我的 PowerShell 竟然就能遠端操作 server 了,為何呢?
其實阿,有些服務安裝完畢之後,就會連帶開啟相關的防火牆設定,而剛好該設定是 PowerShell 可以共用的,所以才會讓我誤認為在 Domain 中使用 PowerShell 是不用任何設定的。舉例來說,當我們安裝了 NLB (網路負載平衡) 的功能之後,會開啟的其中 1 個防火牆規則,如下圖:
我們點內容深入觀察,可以發現,該規則開啟了 svhost.exe 的程式且開放所有 port ,如下圖:
除此之外,大家還可以嘗試自行打開 RPC 動態對應連接埠,如下圖:
如此一來,PowerShell 就可以遠端來操控 server 了。