雑記+備忘録

OS中心の技術情報と趣味について(最近は主に将棋)。備忘録なのでここに書かれたことを試すのは自己責任でお願いします。

ピリ将イベントに参加してきました!

もう1か月も前になりますが、

シュうぇッチマン先生のイベントに参加してきました!

www.piri-girl.work

先生が「感想戦」ということでいくつものポイントから振り返りを行なっていま・・・したが、
先ほど見たら記事が削除されております!
何か思うところあってのことでしょう。
私も感想を書こうと思いました(途中まで書きかけてました)が、先生の意を汲んで書かないことにいたします。

ただ1点、先生の印象ですが、

ホームページのイメージ画像が

 

f:id:saborin-2002:20180818161824p:plain

なので、てっきり若手実業家か東進ハイスクールの有名講師みたいな人が出てくると身構えていましたが、

 

f:id:saborin-2002:20180818161843p:plain

雰囲気としてはこんな感じに近く、第一印象いい意味でホッとして、気楽にイベントに入れました。
(画像は土屋賢二さんの本の表紙イラスト)

あともう1点だけ、先生のハンドルネーム「シュうぇッチマン」は「シュウォッチ」とは関係ないそうです。

f:id:saborin-2002:20180818161858p:plain


↑これが「シュウォッチ

半年後もイベントがあるそうです。
日程が合えば参加しようと思います。

シュうぇッチマン先生、他参加者の皆様、ありがとうございました。

将棋関連にかける時間が激減しておりました

久しぶりの記事となります。
この間、仕事もプライベートでも忙しく、
(プライベートの方は自ら望んだことなのでやむなしですが)
将棋にかける時間が激減していました。
通勤途中に実況動画を見ていたぐらいで、詰将棋などの勉強も6月以降は遠ざかり、
対局も指す将順位戦以外はほぼゼロ、
当然指す将順位戦の戦績もかんばしからず、
B級2組、開幕から1勝もできずに8連敗。降級もほぼ決まったと言ってよいでしょう。

ようやく仕事が夏休みに入ったのでこうしてブログに言い訳を書く時間ができましたが、
さて将棋は何から再開したものか。

夏休み明けもまたしばらくは仕事のことで多く学習することが多そうなので、
しばらく休止状態としてもいいのかもしれません。
働く環境が変わるので、どうなるかは始まってみないと分からない部分はあります。

元々「歳を取ってからも続けられる趣味に」ということで本格的に始めた将棋なので、
忙しいときは無理せず休んでいこうと思います。

そんな中、前々から楽しみだったイベントに一つ参加したので、それについては別の記事で。

PowerShellで共有フォルダ作成、アクセス権設定(後編)

フォルダを作成、共有フォルダにし、NTFSアクセス権で初期状態で付与されている「Users」に対する権限を削除、 適切なドメイングループに「更新」の権限を与える

の、適切なドメイングループに「更新」の権限を与える部分です。

<後半 適切なドメイングループに「更新」の権限を与える>

##### 変数
# 対象フォルダパス
$nW_path = "C:\share3"

# 権限対象ユーザーもしくはグループ
$strUorG = "HOGE\Group01"

# 権限種別
$objFSR = [System.Security.AccessControl.FileSystemRights]::Modify

# 子フォルダや子オブジェクトへの継承
$objIF = ([System.Security.AccessControl.InheritanceFlags]::ObjectInherit `
   -bor [System.Security.AccessControl.InheritanceFlags]::ContainerInherit)

# 継承の別要素
$objPF = [System.Security.AccessControl.PropagationFlags]::None

# 許可もしくは拒否
$objACT = [System.Security.AccessControl.AccessControlType]::Allow


# 権限オブジェクトの生成
$objPM = ($strUorG, $objFSR, $objIF, $objPF, $objACT)

$objAccessRule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule $objPM


# 現在のフォルダアクセス権を取得
$objACL = Get-Acl $nW_path

# 権限オブジェクトをフォルダアクセス権オブジェクトへセット
$objACL.SetAccessRule($objAccessRule)

# 変更されたフォルダアクセス権オブジェクトを実フォルダへセット
$objACL | Set-Acl $nW_path


5. 「更新」の権限付与
幹となる枠組みとしては、
 (1) 権限対象ユーザーもしくはグループ
 (2) 権限種別
 (3) 子フォルダや子オブジェクトへの継承
 (4) 継承の別要素
 (5) 許可もしくは拒否
の5個の要素(引数)を持つ権限オブジェクトを
フォルダアクセス権オブジェクトへセットし、
実フォルダへ反映させる、となります。

(1)についてはユーザーもしくはグループを文字列の型で指定すればよいですが、
(2)~(5)はそれぞれ適切な型のオブジェクトとして指定する必要があります。

参考URL(ありがとうございます)
PowerShellでファイルやフォルダのアクセス権を設定する - YOMON8.NET

(2)権限種別
「System.Security.AccessControl.FileSystemRights」型です。
「Modify」はGUIで設定する「更新」の権限にあたります。
他の一覧については以下の記事にまとまっています。(ありがとうございます)
Windows ACE の AccessMask(マスク)ビットフラグの対応関係 - Qiita
内部ではビット列のようなので、ビット和(-bor)等をうまく使って複数の権限を組み合わせられます。
上記記事の内容ですが、以下に引用します。

ListDirectory                  :        1  =                      1  =  0x00000001  ~  2^ 0
ReadData                       :        1  =                      1  =  0x00000001  ~  2^ 0
WriteData                      :        2  =                     10  =  0x00000002  ~  2^ 1
CreateFiles                    :        2  =                     10  =  0x00000002  ~  2^ 1
CreateDirectories              :        4  =                    100  =  0x00000004  ~  2^ 2
AppendData                     :        4  =                    100  =  0x00000004  ~  2^ 2
ReadExtendedAttributes         :        8  =                   1000  =  0x00000008  ~  2^ 3
WriteExtendedAttributes        :       16  =                  10000  =  0x00000010  ~  2^ 4
Traverse                       :       32  =                 100000  =  0x00000020  ~  2^ 5
ExecuteFile                    :       32  =                 100000  =  0x00000020  ~  2^ 5
DeleteSubdirectoriesAndFiles   :       64  =                1000000  =  0x00000040  ~  2^ 6
ReadAttributes                 :      128  =               10000000  =  0x00000080  ~  2^ 7
WriteAttributes                :      256  =              100000000  =  0x00000100  ~  2^ 8
Write                          :      278  =              100010110  =  0x00000116  ~  2^ 8
Delete                         :    65536  =      10000000000000000  =  0x00010000  ~  2^16
ReadPermissions                :   131072  =     100000000000000000  =  0x00020000  ~  2^17
Read                           :   131209  =     100000000010001001  =  0x00020089  ~  2^17
ReadAndExecute                 :   131241  =     100000000010101001  =  0x000200A9  ~  2^17
Modify                         :   197055  =     110000000110111111  =  0x000301BF  ~  2^17
ChangePermissions              :   262144  =    1000000000000000000  =  0x00040000  ~  2^18
TakeOwnership                  :   524288  =   10000000000000000000  =  0x00080000  ~  2^19
Synchronize                    :  1048576  =  100000000000000000000  =  0x00100000  ~  2^20
FullControl                    :  2032127  =  111110000000111111111  =  0x001F01FF  ~  2^20

「System.Security.AccessControl.FileSystemRights」型の詳細な説明記事です。
FileSystemRights 列挙型 (System.Security.AccessControl)

(3) 子フォルダや子オブジェクトへの継承
「System.Security.AccessControl.InheritanceFlags」型です。
GUIで一般的な「このフォルダー、サブフォルダーおよびファイル」を実現するには
「ObjectInherit」と「ContainerInherit」を「-bor」でビット和にする必要があります。
「System.Security.AccessControl.InheritanceFlags」型の詳細な説明記事です。
InheritanceFlags 列挙型 (System.Security.AccessControl)

(4) 継承の別要素
「System.Security.AccessControl.PropagationFlags」型です。
(3)で継承を行ったときに必要な要素です。今一つ「None」でOKなロジックを理解できていません。
「System.Security.AccessControl.InheritanceFlags」型の詳細な説明記事です。
PropagationFlags 列挙型 (System.Security.AccessControl)

(5) 許可もしくは拒否
「System.Security.AccessControl.AccessControlType」型です。
これは簡単、アクセス権の「許可」もしくは「拒否」です。
「System.Security.AccessControl.AccessControlType」型の詳細な説明記事です。
AccessControlType 列挙型 (System.Security.AccessControl)


以上です。この5個でワンセットとなり、
複数のグループやユーザーを割り当てる場合は、1つずつセットを作成、
割り当てていきます。

PowerShellで共有フォルダ作成、アクセス権設定(前編)

フォルダを作成、共有フォルダにし、NTFSアクセス権で初期状態で付与されている「Users」に対する権限を削除、 適切なドメイングループに「更新」の権限を与える

これをPowerShellでやりたいと思って調べると、方々にある情報を集めないといけないと分かったので、 備忘録っぽく集めておきます。
しかし覚えにくいし複雑。GUIのほうが楽な(と感じられる)設定の一つです。

まずはサンプルスクリプトを載せます。
<前半 共有フォルダ作成から「Users」権限の削除まで>

##### 変数
# 対象フォルダパス
$nW_path = "C:\share3"
# 共有名
$nW_Name = "share3"

##### 処理
# フォルダ作成
New-Item $nW_path -ItemType Directory

# フォルダ共有(共有アクセス権付与も)
New-SmbShare -Name $nW_Name -Path $nW_path -FullAccess Everyone

# 現在のフォルダアクセス権を取得
$objACL = Get-Acl $nW_path

# アクセス権の継承を解除
$objACL.SetAccessRuleProtection($true,$true)

# 変更されたフォルダアクセス権オブジェクトを実フォルダへセット
$objACL | Set-Acl $nW_path

# 現在のフォルダアクセス権を取得
$objACL = Get-Acl $nW_path

# 削除するアクセス権の選択
$objRemoveACL = ($objACL | Select -ExpandProperty Access | Where-Object {$_.IdentityReference -eq "BUILTIN\Users"})

# 複数あるので1つずつ削除を実行
foreach ($wACL1 in $objRemoveACL) {

  # 削除
  $objACL.RemoveAccessRule($wACL1)

}

# 変更されたフォルダアクセス権オブジェクトを実フォルダへセット
$objACL | Set-Acl $nW_path


段階ごとに解説していきます。

1. フォルダ作成
「New-Item」コマンドレットでフォルダを作成します。
「-ItemType Directory」がフォルダを作成するオプションです。


2. フォルダ共有

New-SmbShare フォルダ共有のコマンドレット
-Name <共有名> 共有名を指定するオプション
-Path <ファイルパス> ファイルパスを指定するオプション
-FullAccess <アクセス権対象UorG> フルコントロールを与えるオプション

「-FullAccess」のところを -ReadAccess で 読み取り許可 を、-ChangeAccess で 変更許可 を付与できます。

参考URLは以下です。(ありがとうございます)
PowerShell で共有フォルダーの作成 | blog.yottun8.com
PowerShell で smb コマンドレットで 共有 フォルダを作成する - tech.guitarrapc.cóm


3. アクセス権の上位からの継承を解除
上位からの継承があると「Users」を削除できないので継承を解除します。
「Get-Acl」で現在のフォルダアクセス権をオブジェクトとして取得、
オブジェクトのメソッド「.SetAccessRuleProtection」で継承を設定します。
設定後、「Set-Acl」で設定したアクセス権オブジェクトを実フォルダへ反映させます。
「.SetAccessRuleProtection」の2つの引数は以下の意味があります。

1番目:isProtected
このオブジェクトに関連付けられたアクセス規則を継承から保護する(=継承を無効にする)場合は true。
継承を許可する(=継承を有効にする)場合は false。

2番目:preserveInheritance
継承されたアクセス規則を保持する場合は true。
継承されたアクセス規則を削除する場合は false。
isProtected が false の場合、このパラメーターは無視されます。

参考URLは以下です。(ありがとうございます)
Powershellでフォルダやファイルのアクセス権を設定する | いろんなサーバー設定研究所
ObjectSecurity.SetAccessRuleProtection メソッド (Boolean, Boolean) (System.Security.AccessControl)


4. 「Users」へのアクセス権の削除
「Get-Acl」で現在のフォルダアクセス権をオブジェクトとして取得、
「Select-Object」の「-ExpandProperty」オプションを使用して、「Access」要素を展開しています。
「-ExpandProperty」についてはこちら
オブジェクト型変数の値について

Select-Objectはパラメータ名を指定しないと-Propertyパラメータが指定されたとみなされ、 先述のような動作をしますが、明示的に-ExpandPropertyパラメータを指定することで 「指定プロパティの値を展開したオブジェクト」を出力するようにもできます。

さらに「Where-Object」でグループ名「BUILTIN\Users」で抽出しています。

展開、抽出した値は、一つずつ削除の対象とするために「foreach」で読み込みます。
そして、オブジェクトのメソッド「.RemoveAccessRule」で権限を削除します。
設定後、「Set-Acl」で設定したアクセス権オブジェクトを実フォルダへ反映させます。

参考URLは以下です。(ありがとうございます。「素敵なおひげ」さんには毎度お世話になっております。)
Windows - PowerShellでフォルダのACLユーザを削除したい(119322)|teratail


(後編へ続く)

Windows Server OS ベアメタルリカバリ時に使用するネットワーク関連コマンド

過去何度もやっていながら、久しぶりだと忘れてしまうのでメモです。

WSBのイメージ格納先がネットワーク共有フォルダの場合、
その共有フォルダのあるサーバー等とネットワーク通信を取る必要があります。
Windowsのメディアブート初期ではIPアドレスは割り振られておらず、
ネットワークサービスさえ立ち上がっていない場合があるので以下のコマンドを実行して
ネットワークをつなぎます。

まずはネットワークサービスの起動。(自動的に「wpinit」も起動されて初期化も行われます)

startnet


次に、現在有効なネットワークインターフェースの一覧表示。

netsh interface ipv4 show interfaces


上記一覧表示された中から、共有フォルダにアクセスするのに使えるインターフェースの名前をチェックし、 IPアドレスを割り振ります。
(下図の「イーサネット」がインターフェース名、「192.168.1.5」が割り振るIPアドレス

netsh interface ip set address "イーサネット" static 192.168.1.5 255.255.255.0


最後に、pingで共有フォルダのあるサーバーと通信が取れているか確認します。

ping 192.168.1.2


あとは「exit」でコマンドプロンプトを抜け、ウィザードに沿ってイメージからのベアメタルリカバリが行えます。

フォルダ作成削除リネームなど

基本ながら忘れるのでメモ。

○ フォルダー作成

New-Item C:\Work\Folder -ItemType Directory


○ フォルダーリネーム(ファイルも同じ)

Rename-Item C:\Work\Folder Folder2


○ フォルダー削除(ファイルも同じ)

Remove-Item C:\Work\Folder2 -Force -Recurse

-Force 隠しファイルや読み取り専用ファイルなども削除
-Recurse 配下のサブフォルダも再帰的に削除

○ フォルダー存在確認

if (Test-Path C:\Work\Folder2) {
  echo "フォルダあります"
}


○ ついでにForループとWhileループのひな型も

for ($i = 0; $i -lt 10; $i++) {
  # 0~9が画面出力
  Write-Output ("count:"+$i)
}


$cnt = 0
while ($cnt -lt 10) {
  # 0~9が画面出力
  Write-Output ("count:"+$cnt)
  $cnt++
}

フォルダの所有権を得て全削除

半年ほど前の記事の発展版。
 管理者ユーザーで、特定ユーザーのプロファイルフォルダを全削除したい
目的で、フォルダの所有権とフルコントロール権限を得るコマンドです。

まずは以前のエントリの繰り返しですが、所有権を得るコマンド

takeown /f "<フォルダのパス>" /r /d Y


オプションの意味は

/f <フォルダ名もしくはファイル名フルパス> ・・・ 対象となるフォルダ、ファイルの指定
/r ・・・ フォルダ内のすべてのサブフォルダ、ファイルを再帰的に実行
/d Y ・・・ 確認メッセージに対して「はい」を自動的に返してくれる


次にフルコントロールを得るコマンド

cacls <フォルダのパス>\* /T /G Administrator:F


オプションの意味は

/T ・・・ 現在のディレクトリとすべてのサブディレクトリにある指定されたファイルの ACL を変更
/G <ユーザー名>:<アクセス権>・・・ 指定されたユーザーにアクセス権を与える。Fはフルコントロール


参考にしたのはこのサイトです(ありがとうございます)。
https://www.uramiraikan.net/Works/entry-2889.html
上記サイトに注意書きがあります。覚えておこう。

上記のコマンドはどちらも配下のサブディレクトリ/ファイル全てに対して再帰的に実行されるが、
一度だけでの実行では変更されないものが残る場合がある。その場合は何度か繰り返して実行する
("はい/いいえ"の問い合わせは全て"はい"を選択)


これで削除できるようになります。

以下が以前の記事です。