質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.63%

PowerShellでのカレントディレクトリの取得

受付中

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 4,652

AT_WORK24

score 9

PowerShell内にて
同ディレクト内のxmlファイルを読み込み、
記載してあるパスを取得したいのですが、
カレントディレクトリの値の取得がどうもうまくいきません。。。

(記述コード)

パスファイル読み込み

$myPath = $MyInvocation.MyCommand.Path
[xml]$xml = Get-Content $myPath"\path.xml"
$PATH = $xml.config.path

どなたかお詳しい方がいらっしゃいましたら、ご教授いただけると幸いです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kamikazelight

    2018/11/16 15:28 編集

    タイトルの問題は zuishin様とのやり取りで解決しているようなのでこの質問を解決済みにしてください。回答者が時間をかけてこの質問を読んで 他の質問者が回答を得られるまでにかかる時間が伸びてしまいます。

    キャンセル

回答 3

+3

何がうまくいかないのかわからないけど、とりあえずカッコで括ったらどうでしょう?

(pwd)

あと、用語が間違っていたら話が通じません。必要なのは本当にカレントディレクトリなのか確認してください。

追記

次のスクリプトを試してください。
else ブロックの中が管理者権限で行われる処理です。
コマンドライン引数も一応対応させました。

using namespace System.Security.Principal

$isSu = ([WindowsPrincipal][WindowsIdentity]::GetCurrent()).IsInRole([WindowsBuiltInRole]"Administrator")
if (-not $isSu) {
    $powershell = [Environment]::GetCommandLineArgs()[0]
    $startInfo = New-Object System.Diagnostics.ProcessStartInfo $powershell, ([string]::Join(' ', (@($PSCommandPath) + $args)))
    $startInfo.WorkingDirectory = Get-Location
    $startInfo.Verb = "runas"
    [void][Diagnostics.Process]::Start($startInfo)
} else {
    $PSScriptRoot
    Read-Host
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/14 16:27 編集

    バッチでは作ったことが無いのでわかりません。
    ここに提示されているものではできないということなので、こちらで確かめられないので ps1 にしました。
    こちらで実行して正常動作することを確かめた上で書いていますので、これでうまくいかないなら他に原因があるのかもしれません。
    どのように実行して、どのように動作するのかを詳しく書いてください。

    キャンセル

  • 2018/11/14 17:33

    上記のスクリプトを元にして、実行うまくいきました!
    ありがとうございます!
    xmlファイルの保存についてもお聞きしていいでしょうか。

    $myPath = $MyInvocation.MyCommand.Path
    [xml]$xml = Get-Content $myPath"\path.xml"

    #編集対象のxmlファイルのパスを取得
    $PATH = $xml.config.path

    #編集対象のxmlファイルの指定
    [xml]$Test = Get-Content $PATH"test.xml" -Encoding UTF8

    #保存
    $Test .Save($PATH"test.xml")

    これだと保存の箇所でエラーになって保存が行えないのですが、
    (絶対パス指定だと正常に保存されます)
    もし、変数のパス指定で保存する方法をご存じでしたら、教えていただけると有難いです・・・
    何度もすみません。

    キャンセル

  • 2018/11/14 17:45

    これは全く別の質問ですね。この質問をクローズして新しく質問してください。

    質問する際には、見る人がこの質問を参照しなくていいよう気を使って書いてください。そしてコードはコードブロックを使ってください。

    キャンセル

0

「powershell カレントディレクトリ」でぐぐってみよう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/14 11:35

    ぐぐった結果で試してもうまくいかなかったので。。

    キャンセル

  • 2018/11/14 12:20

    どう試しました?
    それがわからないとアドバイスもできないかと

    キャンセル

  • 2018/11/14 12:34 編集

    $myPath = $MyInvocation.MyCommand.Path

    ありがとうございます。
    上記のコードの箇所で$myPath に実行しているスクリプト自体のパスが入る想定だったのですが、
    値が空で入ってきてしまうんです。。
    調べると、$PSScriptRootや$MyInvocation.MyCommand.Pathでスクリプト自体のパスが取得できるようなのですが・・・どちらも試してみたのですが、

    Get-Content $myPath"\path.xml"

    で$myPathに値が入ってないため、ファイルが存在しませんのエラーとなってしまうという現状です。。。

    キャンセル

0

参照されている
https://s.webry.info/sp/vogel.at.webry.info/201707/article_9.html の手法では$PSScriptRootや$MyInvocation.MyCommand.Pathの取得が難しいため、
バッチとps1の2つに分かれますが以下のような方法は如何でしょうか?

@echo off
powershell -command "start-process powershell.exe -argumentlist %~dp0hoge.ps1 -Verb runas"
exit


hoge.ps1

$myPath = $PSScriptRoot
[xml]$xml = Get-Content (join-path $myPath 'path.xml')
$PATH = $xml.config.path

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.63%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る