分享完與網路卡相關的設定之後,這次要分享如何使用 Windows PowerShell 建立網路共用。
強而有力的 Windows PowerShell 系列文章列表如下:
http://ithelp.ithome.com.tw/event/ironmanarticle2/id/20005121
使用 Win32_Share 類別的 Create 方法,可在 Windows PowerShell 裡,建立網路共用。例如下面的程式碼會建立:
$FolderPath = "C:\Temp"
$ShareName = "MyShare"
# 共用的類型為磁碟機
$Type = 0
# 最多允許多少人同時存取,預設值 = 10
$MaximumAllowed = 25
$Description = "我分享的磁碟機"
$Status = (Get-WmiObject -List |`
Where-Object -FilterScript {$_.Name -eq "Win32_Share"}).`
Create($FolderPath, $ShareName, $Type, $MaximumAllowed, $Description)
# 檢查設定的回傳值,0 表示設定成功,其他表示設定失敗
if ($Status.ReturnValue -gt 0) {
"設定失敗!回傳值:{0}" -f $Status.ReturnValue
}
else {
"設定成功!"
# 使用 Windows 內建的指令來查看設定結果
net share
}
在使用 Create 方法建立網路共用時,至少要給與前 3 個參數:
由於 Windows PowerShell 提供 WMI 型別的加速器(您可以把它當作是 Windows 捷徑的一種),透過 WMI 型別加速器可以更直接地存取 WMI 物件。例如,[WMIClass] 是 ManagementClass 的型別加速器,它具有字串建構函式,可使用 WMI 類別的路徑,來傳回繫結至該類別的物件。因此上面的程式碼可以改寫成:
$FolderPath = "C:\Temp"
$ShareName = "MyShare"
# 共用的類型為磁碟機
$Type = 0
# 最多允許多少人同時存取,預設值 = 10
$MaximumAllowed = 25
$Description = "我分享的磁碟機"
$objWMI = [WMIClass]"Win32_Share"
$Status = $objWMI.Create($FolderPath, $ShareName, $Type, $MaximumAllowed, $Description)
# 檢查設定的回傳值,0 表示設定成功,其他表示設定失敗
if ($Status.ReturnValue -gt 0) {
"設定失敗!回傳值:{0}" -f $Status.ReturnValue
}
else {
"設定成功!"
# 使用 Windows 內建的指令來查看設定結果
net share
}
還記得在「Windows PowerShell 基本操作 - 執行 Windows 的程式」提到:在 Windows PowerShell 中也可執行 Windows 的指令,所以說,使用 net share 也能建立共用:
net share MyShare=C:\Temp /users:25 /remark:"我分享的磁碟機"
Win32_Share 類別不僅可建立共用,更可移除共用,但兩者的做法稍有差別,因為我們必須找到所要移除的特定共用,然後呼叫 Delete 方法,而非像建立共用一樣,只要找到 Win32_Share 類別即可。以下面的程式碼來說,會刪除先前建立的 MyShare 共用:
$ShareName = "MyShare"
$objShare = Get-WmiObject -Class Win32_Share | Where {$_.Name -eq $ShareName}
# 檢查是否有這樣的共用
if ($objShare -ne $Null) {
# 呼叫 Delete 方法
$Status = $objShare.Delete()
# 檢查設定的回傳值,0 表示設定成功,其他表示設定失敗
if ($Status.ReturnValue -eq 0) {
"移除共用成功!"
}
else {
"移除共用失敗!回傳值:{0}" -f $Status.ReturnValue
}
}
同樣地,也可以使用 net share 來移除共用:
net share MyShare /delete