iT邦幫忙

DAY 27
2

強而有力的 Windows PowerShell系列 第 27

使用 Windows PowerShell 建立網路共用

分享完與網路卡相關的設定之後,這次要分享如何使用 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 個參數:

  1. 共用的路徑(亦即程式碼中的 $FolderPath)
  2. 共用的名稱(亦即程式碼中的 $ShareName)
  3. 共用的類型(亦即程式碼中的 $Type)

由於 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

上一篇
使用 Windows PowerShell 檢查網路設定是否正確
下一篇
使用 Windows PowerShell 列出檔案與資料夾的資訊
系列文
強而有力的 Windows PowerShell33

尚未有邦友留言

立即登入留言