設定ファイルを複数マシンで共有する
前半はLinuxのドットファイルをgithubで同期させてる話で後半はPowerShellのプロファイルをDropboxで同期させてる話です。
Linuxのドットファイルを同期させる
Linuxのドットファイルをgithubで同期する方法があちこちに書かれていたので同じ様にやってみました。
登録してあるリポジトリは下記のURLです。
dotfiles
作り方もあちこちに書いてありますが、自分用にメモしておきます。
適当なディレクトリを作成して、そこに現在のドットファイルを移動する
# cd ~ # mkdir dotfiles # mv ./.profile ./dotfiles/ # mv ./.screenrc ./dotfiles/ # mv ./.vimrc ./dotfiles/
移動したファイルからホームディレクトリにシンボリックリンクを作成するスクリプトを作成する。
# cd ~/dotfiles # touch dotfileslink.sh # chmod +x dotfileslink.sh # nano dotfileslink.sh
#!/bin/sh # ln -sf ~/dotfiles/.profile ~/.profile # ln -sf ~/dotfiles/.vimrc ~/.vimrc # ln -sf ~/dotfiles/.screenrc ~/.screenrc
# ./dotfileslink.sh # git init # git add -A # git commit -a -m "Initial commit" # git remote add origin %githubのURL% # git push origin master
PowerShellのプロファイルも同期してみた
こちらはgithubではなくてDropboxにリポジトリを作成しています。
~\Dropbox\git\psprofileを作成して設定します。
> New-Item -Type Directory ~/Dropbox/git/psprofile > Set-Location ~/Dropbox/git/psprofile > git init --bare --share=true
プロファイルがあるディレクトリに移動して適当なディレクトリを作成します。
> Set-Location ~/Documents/WindowsPowerShell > New-Item -Type Directory dotfiles
既に存在しているプロファイルを作成したディレクトリに移動します。
名称も変更しているのは別のマシンで取り込む時に必要そうだったからです。
移動した後は新しいディレクトリ内のスクリプトをプロファイルに取り込むためのプロファイルスクリプトを作成します。
> Move-Item Microsoft.PowerShell_profile.ps1 ./dotfiles/psprofile.ps1 > Write-Output ". ~\dotfiles\psprofile.ps1" > $PROFILE > Copy-Item $PROFILE ./dotfiles
ここまでできたらDropboxのリポジトリに突っ込んでおきます。
> Set-Location ./dotfiles > git init > git add -A > git commit -a -m "Initial commit" > git remote add origin ~/Dropbox/git/psprofile > git push origin master
こんな感じで。
新しいマシンでの取り込み
もちろんgitを入れてパスの設定までしておかないといけませんし、Dropboxを入れて同期が完了していないといけません。
> New-Item -Type File -Force $PROFILE > Set-Location ~/Documents/WindowsPowerShell > git clone ~/Dropbox/git/psprofile > Set-Location ./dotfiles > Copy-Item ./Microsoft.PowerShell_profile.ps1 ../
これでPowerShellを立ち上げ直せば他のマシンと同じプロファイルが使えるはずです。
PowerShellの場合git入れるのが面倒だったり、設定ファイル一つならコピーしちゃってもいいんですけどね。
Get-Contentで文字コードを指定してファイルを読み込む
JOSMで作成した地物データファイルをPowerShellで読み込もうとしたところエラーになってしまいました。
PS > $a = [xml](Get-Content .\基準点.xml)
値 "System.Object[]" を型 "System.Xml.XmlDocument" に変換できません。エラー: "'<' (16 進数値 0x3C) は無効な属性文字です。 行 12、位置 5 です。" 発生場所 行:1 文字:11 + $a = [xml] <<<< (Get-Content .\基準点.xml) + CategoryInfo : NotSpecified: (:) []、RuntimeException + FullyQualifiedErrorId : RuntimeException
構造に問題があるのかと思ったけどInternetExplorerなどではエラーなく表示できるので問題ないはず。
xyzzyで「基準点.xml」を開いてみたところ文字コードが「utf8n」となっていました、BOMなしのUTF-8のようです。
BOMがないことによって文字コードの判別に失敗したPowerShellがエラーを起こした模様。
Get-Contentで読み込む際に文字コードを指定できれば解決しそうということで「-Encoding UTF8」を付けて実行してみたところうまく解釈してくれました。
PS > $a = [xml](Get-Content -Encoding UTF8 .\基準点.xml)
Get-HelpしてもGet-Contentに「-Encoding」のオプションなんて出てこなかったような気がするけどこれでイケました。
2014/04/24追記
////ココカラ
日本語ヘルプの入っていないPowerShellだと「-Encoding」のオプションが表示されるようです。
環境によってちょっと異なるようですね。
////ココマデ
PowerShellでリモートマシンに接続する
PowerShellでリモート管理できないか探していたらリモートマシンに接続する方法があったので試してみました。
今回勢いで実機でテストしてしまったのは内緒です。
構成は下記のような感じ。
- サーバー(接続される側):ThinkPadX200 Windows 8.1 Pro Update 1
- クライアント(接続する側):ThinkPadT420 Windows 7 Enterprise SP1
以下設定メモ
続きを読む一般ユーザーでタスクスケジュールを組めるようにする
Windows 8.1 Proで管理者権限を持たない一般ユーザーに対し、タスクスケジュールを組みたかったけど、タスクスケジューラからユーザーにタスクスケジュールを組む権限が付与されていないと言われてしまった。
権限を与えるにはWindows Serverなどと同じ様に%SystemRoot%\Tasksディレクトリにアクセス権限を与えれば良いようなので試してみた。
Windows 8.1 Proであれば%SystemRoot%はC:\Windows\System32あたりのはずなので下記のコマンドを管理者権限でコマンドプロンプトかPowerShellを使って実行する。
> CACLS C:\Windows\System32\Tasks /E /G %ユーザー名%:C
後はタスクスケジューラを起動して必要なタスクを作成すればOK。
WindowsでVPNの自動再接続を行う
Windowsの起動時に自動的にVPN接続をするという形で起動時に自動的にVPNへ接続できるようにしたわけですが、なぜか1日経つとVPN接続が切れてしまうので再接続を行えるようにしました。
バッチファイルとPowerShellスクリプトとタスクスケジューラを組み合わせてるんですが、なんか簡単な方法ないですかね…。
以下設定メモ
続きを読むPowerShellで引数を含んだエイリアスを作る
PowerShellで新しい空のファイルを作るにはNew-Itemコマンドを使用して
> New-Item -type file hoge
とするとhogeが作成される。作成されるんだけど毎回コマンドと引数をタイプするのは面倒なのでエイリアスに設定しようとしたけど、Set-Aliasコマンドでは引数を含んだコマンドをエイリアスに設定できないらしい。
できないからと言って毎回コマンドを打つのは面倒だと調べたら関数を作ればよいということにたどり着いた。
早速$profileを編集して関数を作成する。
> notepad $profile
function touch { New-Item -type file $args }
関数名はUnix系で利用しているtouchを使用することにして、内容にNew-Item -type fileを記述。関数の引数を受け取る$argsを渡すことで引数を含んだコマンドを実行できるようにした。
これで
> touch hoge
と打つとhogeが作成されるようになる。
$argsは配列としても振る舞うようなので他の関数を作成するときには気をつけたい。