Netwrix 1Secureは、データとアイデンティティ全体にわたる統合された可視性を提供します。14日間の無料トライアルでフルアクセス可能です。無料トライアルを開始

リソースセンターブログ

最も役立つ SharePoint PowerShell コマンド

最も役立つ SharePoint PowerShell コマンド

Aug 26, 2025

最も役立つ SharePoint PowerShell コマンドにより、管理者はネイティブ ツールよりも効率的に、サイト、オブジェクト、権限を管理できます。Get-SPSiteGet-SPWeb のような cmdlet は、サイトやファイルの詳細情報を提供します。一方で New-SPSiteRemove-SPSite、および Set-SPUser により、サイトの作成、削除、アクセス制御がスムーズになります。レポート作成、権限管理、監査(audit)を自動化することで、SharePoint PowerShell スクリプトは生産性を高め、エラーを減らし、環境全体のセキュリティを強化します。

SharePoint Server は、Microsoft Office と統合する Web ベースの共同作業プラットフォームです。SharePoint サイトの設定を構成するには、システム管理者は、多くの場合、SharePoint 製品に付属してインストールされる SharePoint Management Shell を使用します。SharePoint Management Shell を実行すると、Windows PowerShell の実行環境が呼び出され、sharepoint.ps1 という名前のスクリプト ファイルが実行されます。このスクリプトは、SharePoint 用の Windows PowerShell スナップインを読み込み、いくつかのコマンドを実行します。これらのコマンドはそれほど重要ではありません。たとえば、コマンド実行のホーム ディレクトリとして C:UsersUsername を選択し、PowerShell コンソールの最新バージョンを実行します。

より良い選択肢は PowerShell ISE を使用することです。SharePoint を管理するために特別に作成された多くの cmdlet を含むだけでなく、色分けされたコード、デバッグ エンジン、そして cmdlet 検索エンジンも備えています。

SharePoint のスナップインを読み込むには、次のコマンドを実行する必要があります。

      Add-PSSnapin Microsoft.SharePoint.PowerShell
      

その後、Microsoft SharePoint PowerShell の cmdlet に関する最新情報を取得するために、PowerShell のヘルプを更新しておくとよいでしょう。

      Update-Help
      

では、SharePoint スナップインで利用できる cmdlet は何でしょうか。ここに、それらをすべて一覧表示するコマンドがあります:

      Get-Command -Module "Microsoft.SharePoint.PowerShell"
      

それでは、最も役立つ SharePoint の cmdlet を詳しく見ていきましょう。

SharePoint サイト情報の取得

Get-SPSite は、SharePoint サイト コレクションに関する情報を取得するための主要な cmdlet です。SharePoint サイトの URL と互換性レベル(SharePoint のバージョン)を一覧表示します。

Getting SharePoint Site Information Using Get-SPSite cmdlet

この cmdlet で Select-Object パラメーターを使用すると、サイトの所有者、ストレージ使用量、最大クォータ レベル、最終的なコンテンツの更新日時など、特定のプロパティを取得できます:

      Get-SPSite "http://sharepoint/sites/ent" | Select-Object url, owner, @{Expression={$_.Usage.Storage}}, @{Expression={$_.Audit.AuditFlags}}, readonly, LastContentModifiedDate, @{Express={$_.QuotaStorageMaximumLevel}}
      

Getting SharePoint Site Information Using the Select-Object

さらに、SharePoint ファーム内のすべてのサイトに関する情報を csv ファイルにエクスポートすることもできます:

      Get-SPWebApplication http://sharepoint/ | Get-SPSite -Limit All | Get-SPWeb -Limit All | Select Title, URL, ID, ParentWebID | Export-CSV C:rootsharepointinventory.csv -NoTypeInformation
      

また、Get-SPSite cmdlet を使用して、特定の SharePoint サイトに対するすべてのグループとそのメンバーを一覧表示する SharePoint PowerShell スクリプトを作成できます:

      $site = Get-SPSite http://sharepoint/sites/ent/

$groups = $site.RootWeb.sitegroups

foreach ($grp in $groups) {"Group: " + $grp.name; foreach ($user in $grp.users) {"  User: " + $user.name} }

$site.Dispose()
      

Getting a Lists of Groups and Their Members for a Particular SharePoint Site

SharePoint サイトの完全な権限レポートが必要な場合は、次のコードを実行し、SharePoint サイトの URL($SPSiteURL)と、データを csv ファイル($ExportFile)にエクスポートするパスを指定してください:

      [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$SPSiteUrl = "http://sharepoint/sites/ent"
$SPSite = New-Object Microsoft.SharePoint.SPSite($SPSiteUrl);
$ExportFile = "C:rootPermissions.csv"

"Web Title,Web URL,List Title,User or Group,Role,Inherited" | out-file $ExportFile

foreach ($WebPath in $SPSite.AllWebs)
{
   if ($WebPath.HasUniqueRoleAssignments)
        {
          $SPRoles = $WebPath.RoleAssignments;
          foreach ($SPRole in $SPRoles)
          {
            foreach ($SPRoleDefinition in $SPRole.RoleDefinitionBindings)
            {
                $WebPath.Title + "," + $WebPath.Url + "," + "N/A" + "," + $SPRole.Member.Name + "," + $SPRoleDefinition.Name + "," + $WebPath.HasUniqueRoleAssignments | out-file $ExportFile -append
            }
          }
        }
        
        foreach ($List in $WebPath.Lists)
        {
           if ($List.HasUniqueRoleAssignments)
           {
             $SPRoles = $List.RoleAssignments;
             foreach ($SPRole in $SPRoles)
             {
               foreach ($SPRoleDefinition in $SPRole.RoleDefinitionBindings)
               {
                    $WebPath.Title + "," + $WebPath.Url + "," + $List.Title + "," + $SPRole.Member.Name + "," + $SPRoleDefinition.Name | out-file $ExportFile -append
               }
             }
           }
        }
}
$SPSite.Dispose();
      

SharePoint サイトで特定のファイルを見つけるには、Get-SPWeb cmdlet を使用する必要があります。以下は、「http://sharepoint/sites/ent」サイトで、名前に「readme」という単語が含まれるファイルを検索するスクリプトです:

      Get-SPWeb http://sharepoint/sites/ent |
   Select -ExpandProperty Lists |
   Where { $_.GetType().Name -eq "SPDocumentLibrary" -and
           -not $_.Hidden } |
   Select -ExpandProperty Items |
   Where { $_.Name -like "*readme*" } |
   Select Name, {$_.File.Length}, url
      

次は、特定のユーザーが作成したすべてのファイルを出力するレポートを作成しましょう。このスクリプトは、たとえば従業員が退職して、そのデータを他の人に引き継ぐ必要がある場合に役立ちます。

      Get-SPWeb http://sharepoint/sites/ent |
   Select -ExpandProperty Lists |
   Where { $_.GetType().Name -eq "SPDocumentLibrary" -and
          -not $_.Hidden } |
   Select -ExpandProperty Items |
   Where { $_["Created By"] -like "*system*" } |
   Select Name, url, {$_["Created By"]}
      

最後のスクリプトでは Get-SPWeb cmdlet を使って、指定した拡張子を持つすべてのファイルをレポートします:

      Get-SPWeb http://sharepoint/sites/ent |
Select -ExpandProperty Lists |
   Where { $_.GetType().Name -eq "SPDocumentLibrary" -and
           -not $_.Hidden } |
   Select -ExpandProperty Items |
   Where { $_.Name -Like "*.rtf" } |
   Select Name,
         @{Name="URL";
          Expression={$_.ParentList.ParentWeb.Url + "/" + $_.Url}}
      

PowerShell を使用して SharePoint サイトとオブジェクトを管理する

新しい SharePoint サイトは通常、テンプレートを使用して作成されます。すべてのサイト テンプレートの一覧を取得するには、引数なしで Get-SPWebTemplate コマンドレットを実行します。

テンプレートに基づいて新しい SharePoint サイトを作成するために、Get-SPWebTemplate コマンドレットを New-SPSite コマンドレットと組み合わせて使用します。以下は「Team Site」テンプレート(STS#0)を使ってサイトを作成するスクリプトの例です:

      $template = Get-SPWebTemplate "STS#0"
New-SPSite -Url "http://sharepoint/sites/Netwrixteamsite" -OwnerAlias "enterpriset.simpson" -Template $template
      

サイトを削除するには Remove-SPSite コマンドレットを使用します:

      Remove-SPSite -Identity "http://sharepoint/sites/Netwrixteamsite" -GradualDelete
      

状況によっては、サイト コレクションの管理者を変更する必要がある場合があります。指定したユーザーに管理者権限を追加するには、次のスクリプトを実行してください:

      Set-SPSite -Identity "http://sharepoint/sites/Netwrixteamsite" -SecondaryOwnerAlias " i:0#.w|enterprisei.scur"
      

それでは、サイト コレクション(site collections)への権限を管理する方法を見ていきましょう。まず、特定の Active Directory ユーザー アカウントに、いくつかのアクセス権を追加します。この場合、ユーザー「enterpriset.simpson」には、サイト「http://sharepoint/sites/ent」に対する「Contributor」権限が付与されます。「enterpriset.simpson」のような通常のユーザー アカウント名の前には、「i:0#.w|」というプレフィックスを付ける必要がある点に注意してください。付けないと実行が失敗し、スクリプトがエラーを生成します。

      Set-SPUser -Identity "i:0#.w|enterpriset.simpson" -Web http://sharepoint/sites/ent -AddPermissionLevel "Contributor"
      

特定の AD security グループに権限を追加するには、同じスクリプトを使いますが、ユーザー アカウント名ではなくグループ名を入力してください。

ユーザーをグループに追加するには、次のコマンドを使用します:

      Set-SPUser -Identity "i:0#.w|enterprisej.carter" -Web http://sharepoint/sites/ent -Group "Enterprise Owners"
      

まとめ

ご覧のとおり、SharePoint PowerShell スクリプトを使って SharePoint サイトを管理し、レポートを作成することは、最初に思うほど難しくありません。実際、場合によっては、管理者の監査ログからレポートを生成するよりも、スクリプトを実行したほうがはるかに速いことがあります。

Microsoft SharePoint 環境を安全かつ高い可用性で維持するには、そこで発生する変更も注意深く追跡する必要があります。 Netwrix Auditor for SharePoint は、SharePoint の変更に関するレポートを簡単に生成し、「誰が」「何を」「いつ」「どの SharePoint farm で」変更したのかを完全に可視化できます。さらに、重要な変更についても自動的に通知を受け取れます。加えて、 Netwrix Auditor for SharePoint は、現在の権限とその権限がどのように付与されたかについての完全な情報を提供し、また SharePoint 環境内の「継承の不整合(継承が壊れている状態)」も表示します。

共有する

もっと詳しく

著者について

Asset Not Found

Jeff Melnick

システムエンジニアリング ディレクター

Jeff は Netwrix における Global Solutions Engineering の元ディレクターです。彼は長年にわたり Netwrix のブログ執筆者であり、講演者、プレゼンターとしても活躍しています。Netwrix のブログでは、Jeff がシステム管理の体験を大きく改善できるライフハックや、役立つヒント、ちょっとしたコツを共有しています。