Powershellで ローカルグループ名と所属するユーザー名を、カンマ区切りで出力する
前提:Powershell ver5.1以上であること。(Get-LocalGroupはver5.1以降のコマンドレット) Powershell ver2.0以上でも使えるように、一番下に追記しています!!!!
ローカルグループ名と所属するユーザー名を、カンマ区切りで出力する(ver5.1以上)
#### ローカルグループ名と所属するユーザー名を、カンマ区切りで出力するコード[#ここから#] # ローカルグループ名を配列に格納 $group_name_list=(Get-LocalGroup).name # 配列に格納したローカルグループ名を、1つ1つ取り出して処理するループ foreach ($group_name in $group_name_list) { # 取り出したローカルグループ名に所属するユーザー名を、配列に格納 $group_member_list=(Get-LocalGroupMember $group_name).name # 配列に格納したユーザー名を、1つ1つ取り出して処理するループ foreach ($group_member in $group_member_list) { # ローカルグループ名とユーザー名をカンマ区切りにして標準出力する echo "$group_name,$group_member" # 配列に格納したユーザー名を、1つ1つ取り出して処理するループ[終了] } # 配列に格納したローカルグループ名を、1つ1つ取り出して処理するループ[終了] } #### ローカルグループ名と所属するユーザー名を、カンマ区切りで出力するコード [#ここまで#] <# 結果出力の例 (EC2) Administrators,EC2AMAZ-HELH38R\Administrator Guests,EC2AMAZ-HELH38R\Guest Guests,EC2AMAZ-HELH38R\Gutest System Managed Accounts Group,EC2AMAZ-HELH38R\DefaultAccount Users,EC2AMAZ-HELH38R\Gutest Users,NT AUTHORITY\Authenticated Users Users,NT AUTHORITY\INTERACTIVE #>
参考:ワンライナー
(Get-LocalGroup).name |%{$group_name=$_;(Get-LocalGroupMember $group_name).name|%{echo "$group_name,$_"}}
Powershell ver2.0以上であれば使えるコード
# WMIオブジェクトのWin32_GroupUserクラスを呼び出す。その中からグループ名と所属ユーザー名を取り出して表にする(Select-Object) $groupuser = Get-WmiObject Win32_GroupUser |Select-Object GroupComponent,PartComponent # 取り出したグループ名と所属ユーザー名の表を1行ずつ処理するループ foreach ($record in $groupuser) { # グループ名以外の情報を削る。(GroupComponent列の値をカンマ区切りにして、2つ目がグループ名になる。「Name=」を置換して消す。) $group=($record.GroupComponent.split(",")[1].replace("Name=","")) # ユーザー名以外の情報を削る。(PartComponent列の値をカンマ区切りにして、2つ目がユーザー名になる。「Name=」を置換して消す。) $member=($record.PartComponent.split(",")[1].replace("Name=","")) # CSV形式にして出力 echo "$group,$member" # 取り出したグループ名と所属ユーザー名の表を1行ずつ処理するループ[終了] } <# 結果 "Administrators","Administrator" "Guests","Guest" "Guests","Gutest" "System Managed Accounts Group","DefaultAccount" "Users","INTERACTIVE" "Users","Authenticated Users" "Users","Gutest" #>
参考:ワンライナー
Get-WmiObject Win32_GroupUser | Select-Object GroupComponent,PartComponent | %{$group=($_.GroupComponent.split(",")[1].replace("Name=",""));$member=($_.PartComponent.split(",")[1].replace("Name=",""));echo "$group,$member"}
AWSBlackBelt読破への道
2018/01/29 現在 Black Belt 数 192★ これ以外にも追加がある。 その他までで:103 <= これを1日3つ読むと1月
コンピューティング
- 20
ストレージ & コンテンツ配信
- 11
データベース
- 9
ネットワーキング
- 3
開発者用ツール
- 11
管理ツール
- 8
セキュリティ & アイデンティ
- 8
分析
- 7
AI
- 1
IoT
- 2
ゲーム開発
- 2
モバイルサービス
- 6
アプリケーションサービス
- 8
エンタープライズアプリケーション
- 4
コンタクトセンター
- 1
その他
- 2
ソリューション別資料
- 72
業種別資料
- 3
その他の資料
- 14
実績
2018/01/27
2018/01/28
2018/01/29
2018/02/04
2018/02/05
- [Amazon EC2] Instance Store & Elastic Block Store
2018/02/06
ファイルリスト作成し、tarで圧縮するシェルスクリプト
やりたかったこと
- 指定フォルダ(hoge)のファイルリスト(パーミッション、タイムスタンプ、サイズ、フルパス)を作成する(~filelist.log)
コマンド:find /hoge_parent/hoge -ls - 実行ログに処理開始時間を記録する(~execution.log)
- 指定フォルダ(hoge)をtar形式に圧縮する(エラーの場合は標準出力に渡す)
コマンド:tar cfv /hoge.tar -C /hoge_parent hoge
解説 :/hoge_parent に移動し(-C)、hogeフォルダを圧縮する。圧縮して/hoge.tarを作成する(cfv) - 実行ログに処理修了時間を記録する(~execution.log)
#!/bin/bash << THIS_IS_COMMENT_LINE This script makes a "tar" archive and outputs list of the archived files and outputs a log to ensure results. available: HP-UX / RHEL xx caution!! user must be "root". usage: $1 is folder to archive $2 is name of "tar" archive $3 is destination to make "tar" archive $4 is name of filelists and log sample: sh commontarls.sh \ /Users/t-yamamoto/Documents/_Ruby/ \ _Ruby.tar \ /Users/t-yamamoto/Documents/bkyama \ _Ruby THIS_IS_COMMENT_LINE # define variable folder_to_archive="$1" name_of_tar="$2" destiation_of_tar="$3" name_of_filelists_log="$4" # to output fullname file list find ${folder_to_archive} -ls > ${destiation_of_tar}/${name_of_filelists_log}_filelist.log # to output start date echo "start ${name_of_tar}" >> ${destiation_of_tar}/${name_of_filelists_log}_execution.log date >> ${destiation_of_tar}/${name_of_filelists_log}_execution.log # to make "tar" archive echo command: \ tar cfv ${destiation_of_tar}/${name_of_tar} \ -C `dirname ${folder_to_archive}` `basename ${folder_to_archive}` \ >> ${destiation_of_tar}/${name_of_filelists_log}_execution.log tar cfv ${destiation_of_tar}/${name_of_tar} \ -C `dirname ${folder_to_archive}` `basename ${folder_to_archive}` \ >> ${destiation_of_tar}/${name_of_filelists_log}_execution.log 2>&1 case `uname` in "Linux") exitcode=$?;; "HP-UX") exitcode=$status;; esac [ ${exitcode} -eq 0 ] && echo "status:${exitcode} ok!!" || \ echo "status:${exitcode} archive failed!!!!!!!!" # to output end date echo "end ${name_of_tar}" >> ${destiation_of_tar}/${name_of_filelists_log}_execution.log date >> ${destiation_of_tar}/${name_of_filelists_log}_execution.log exit 0
- 参考にしたサイト
ls -lコマンドの結果をサブディレクトリ含めてフルパスで列挙したい - Qiita
シェルスクリプトで親ディレクトリのパスを取得したい – hrendoh's tech memo
終わり
2017/12/10(日) -シェル変数
1. /etc/profile
このファイルに全ユーザ共通の環境変数設定を記載しています。
読み込みは、ユーザーがログインした時(ログインシェル)です。
(ターミナルログイン、bash --login、ssh、su - コマンドなど)
2. ~/.bash_profile
各ユーザのホームディレクトリ(~/)にあります。
このファイルにユーザ毎の環境変数設定を記載しています。
読み込みは、ユーザーがログインした時(ログインシェル)です。
(ターミナルログイン、bash --login、ssh、su - コマンドなど)
1. の次に読み込み、
1. で設定した環境変数と同名の環境変数がある場合は上書きします。
3. ~/.bashrc
各ユーザのホームディレクトリ(~/)にあります。
読み込みは、インタラクティブシェルを起動する時です。
(bash、su コマンドなど)
また、基本的には 2. の ~/.bash_profile に、 3. の ~/.bashrc を呼ぶ記載があります。
結果として、この ~/.bashrc に定義しておくことで、
ログインシェルでもインタラクティブシェルでも同じ環境変数を定義することが可能です。
4. /etc/bashrc
このファイルに全ユーザ共通の関数とエイリアス環境変数設定を記載しています。
ここでデフォルトのプロンプトを決める「PS1」の設定などをしています。
(bash、su コマンドなど)
また、基本的には 3. の ~/.bashrc に、 4. の /etc/bashrc を呼ぶ記載があります。
結果として、この /etc/bashrc に定義しておくことでも、3. ~/.bashrc と同様、
ログインシェルでもインタラクティブシェルでも同じ環境変数を定義することが可能です。
1. 2. で環境変数を定義、
3. 4. で関数やプロンプト表示を定義するのが本来は一般的な使い方です。
# シェル変数と環境変数の違い
シェル変数・・・・現在のシェル(同一プロセス)内でのみ有効な変数(exportしない変数)
環境変数・・・・・現在のシェルから呼び出すシェル(子プロセス)にも引き継がれる変数(exportする変数)
test.sh での実行例。
# testval.sh の中身
echo $testval
# シェル変数の例
testval="test"
echo $testval
=> test
sh test.sh
=> 何も出力ない
# 環境変数の例:
testval="test"
export testval
echo $testval
=> test
sh test.sh
=> test
# .(source)コマンドと、shコマンド(またはフルパス実行)の違い
どちらのコマンドも、引数に指定されたファイルを実行しますが、
違いは下記です。
shコマンド(またはフルパス実行)・・・・別シェル(別プロセス)で起動
.(source)コマンド・・・・・・・・・・現在のシェル(同一プロセス)で起動
# shコマンド(またはフルパス実行)
testval2="test2"
echo $testval2
=> test2
sh test.sh
=> 何も出力ない
# .(source)コマンド
testval2="test2"
echo $testval2
=> test2
. test.sh
=> test2
上記を全て踏まえると現在のシェル上に環境変数を定義し、
shコマンドで呼び出すシェルからも参照できるようにするには、
~/.bashrc または/etc/bashrcに、
下記のように記載します。
# 案1
test=testprog
export test
# 案2
. ~/envsetting
# ~/envsettingの中身
test=testprog
export test
Ruby--スレッド処理
# スレッド処理 threads=[] txtfilelist = %w{yamazon.txt yamazon2.txt} for txtfile in txtfilelist threads << Thread.new(txtfile) do |txt| File.open(txt, "a") do |file| file.puts "hello" end end end # 待ち合わせ threads.each do |each_thread| each_thread.join end
Ruby--ファイル読み書き、ファイバー
# 書き込み File.open("yamazon.txt", "w") {|file| file.puts "hello";file.puts "a"} # 書き込み 追記 File.open("yamazon.txt", "a") {|file| file.puts "h i j k";file.puts "a hello"} # ファイルオープン 改行区切りで読み込み表示 File.open("./yamazon.txt") do |file| file.each_line("\n") {|line| p line} end # 上と同じ File.open("yamazon.txt","r") {|file| file.each_line {|line| p line}} # 正確には File.open("yamazon.txt","r") {|file| file.each_line("\n") {|line| p line}} # 上と同じ File.foreach("./yamazon.txt") {|line| p line} # 正確には File.foreach("./yamazon.txt","\n") {|line| p line} # 1つの文字列として読み込み str= IO.read("yamazon.txt") # 出てくる単語を数えるFiber words = Fiber.new do File.foreach("./yamazon.txt") do |line| line.scan(/\w+/) do |word| Fiber.yield word.downcase end end end counts = Hash.new(0) while word = words.resume counts[word] += 1 end counts # => {"hello"=>2, "a"=>2, "h"=>1, "i"=>1, "j"=>1, "k"=>1}
McAfee VirusScan Enterprise 8.xのウイルススキャンで、ネットワークドライブ接続先をスキャンするためのメモ。
- エージェントの入っているWindows7端末から、ネットワークドライブマウントしているXP端末のローカルドライブをスキャンする必要があり、調べた。
結論
McAfeeが行うスキャンはユーザー単位に行う
- エージェントを入れている7端末でローカルディスク(CやD)をスキャンしている時は、ログインしているユーザー(のディスクI/O、ファイルアクセス権)でスキャンする
- ネットワークドライブ接続(net use)先のディスク(XP端末)をスキャンする時は、接続認証したユーザーの(のディスクI/O、ファイルアクセス権)でスキャンする
上記により、XP端末をスキャンするには、XP端末で利用するユーザーを固定して(仮:userA)、Windows7でネットワークドライブマウントする時は、固定したユーザー(userA)で接続認証しスキャンする。
詳細は下記
そもそも、ローカルドライブでのスキャンはどのユーザーで実行しているの?
- 答え:ログインユーザー。ログオフ時はシステムユーザー(サービス起動ユーザー)。
- 要はログインユーザーでのディスクI/Oをフックしてスキャンしているということ。
- 参考リンク①:Knowledge Center
https://kc.mcafee.com/corporate/index?page=content&id=KB71642&actp=LIST&viewlocale=ja_JP
手動スキャン タスクとスケジュールされたスキャン タスクの間にはどのような認証が使用されますか。 VSE では手動タスクでもスケジュールされたタスクでも実行できます。 このようなタスクが明示的に特定の視覚情報を提供することなく設定されている場合、 VSE は次のアカウントを使用します。 ・NT 権限 / システム カウント(スケジュールされたタスクで、ログインしているユーザーがいない場合) ・ログオン ユーザー アカウント(手動タスクの場合)
次にネットワークドライブのスキャンはどのユーザーで実行しているの?
- 答え:ネットワーク接続(net useなど)の認証に用いたユーザー。ログオフ時にもシステムユーザー(サービス起動ユーザー)が実行してくれるが、ネットワーク接続は、ネットワーク接続を実施したユーザーのログイン時しか有効にならないため、できない。
- 参考リンク②:Knowledge Center
https://kb.mcafee.com/corporate/index?page=content&id=kb60489
Windows XP Windows 2000 Available depending on security assignments relating to the credentials used on the destination computer (which must also be Windows 2000 or XP). The rights required equal Microsoft delegate impersonation level. How this is achieved depends on Active Directory (AD) / Domain membership, mix of operating systems and Service Pack levels. Refer to your Microsoft documentation for instructions. Also see http://technet.microsoft.com/en-us/library/cc961980.aspx.
- 参考リンク③:Knowledge Center ※①と同じ
https://kc.mcafee.com/corporate/index?page=content&id=KB71642&actp=LIST&viewlocale=ja_JP
McShield サービスはシステム サービスとして実行されています。 Intel Security が、これを変更しないように推奨する理由は何ですか。 技術的には変更できますが、Intel Security では変更しないようお勧めしています。 McShield サービスは、デフォルトでは、システム サービスとして実行されます。 これは、どのローカル リソースにもアクセスでき、リモート スキャニングを実行できるようにするためです。 ネットワーク ドライブ スキャニングが有効になっている場合、このプロセスはリクエスタになりすまします。
end