PowerShellでのSystem.Object[]からSystem.Stringへの変換に関するエラー

このQ&Aのポイント
  • PowerShellでSystem.Object[]をSystem.Stringに変換する際にエラーが発生します。
  • FolderBrowserDialogで取得したフォルダー名を「Set-Location」で使用しようとすると、パラメーターの型エラーが発生します。
  • ネットでの検索では解決策が見つからず、問題の原因や解決方法が不明です。
回答を見る
  • ベストアンサー

PowerShell Object -String

PowerShell でSystem.Object[]をSystem.Stringに変換できない。 FolderBrowserDialogで取得したフォルダー名を「Set-Location 」で使いたいのですが次のエラーが出ます。 <<Set-Location : パラメーター 'Path' で必要とされる型 'System.String' に 'System.Object[]' を変換できません。指定されたメソッドはサポートされていません。>> スクリプトは次ようになります。 $dlg = New-Object System.Windows.Forms.FolderBrowserDialog if($dlg.ShowDialog() -eq "OK") { $ScoreFolder = @($dlg.SelectedPath ) } $dlg=$null Set-Location $ScoreFolder ネットでいろいろ検索したのですがよく分かりませんでした。 どなたか教えていただけないでしょうか。よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

$dlg.SelectedPath これ自体はString型ですので、 @($dlg.SelectedPath )とすると、String型の配列になってしまいます。 よって、$ScoreFolder = $dlg.SelectedPath で良いかと思うのですが。 試してはいません。 https://msdn.microsoft.com/ja-jp/library/system.windows.forms.folderbrowserdialog.selectedpath(v=vs.110).aspx

関連するQ&A

  • [PowerShell] メソッド内からの呼び出し

    お世話になります。 Win10、PowerShellでアプリの作成を行っています。 アセンブリ追加したクラスを使用したいのですが、Add-Typeで追加したクラスを使用することが出来ず困っております。 ■成功例 Add-Type -Assembly System.Windows.Forms [System.Windows.Forms.MessageBox]::Show("めっせーじ!") # → これだと期待通りにメッセージダイアログが表示されます。 ■失敗例 Add-Type -Assembly System.Windows.Forms class ClsTest {  exec() {   [System.Windows.Forms.MessageBox]::Show("めっせーじ!")  } } $obj = New-Object ClsTest $obj.exec() # → クラスのメソッドに入れた途端、[System.Windows.Forms.MessageBox]が見つかりません、と言うエラーが発生します メソッドの中から期待通りに呼び出すには、どうすればよろしいでしょうか。 なお、当該部分を内包したグローバルなファンクションを別途用意し、それをメソッドから呼び出す方法は無しでお願いします。 うまく行くことは確認していますが、実際にはもっと複雑な処理を複数のクラスを使って行いたいため、応用できませんでした。 以上、なにとぞご教示のほどよろしくお願いいたします。

  • VBで選択したフォルダにフォルダをコピーしたい

    VBで、選択したフォルダに、中身の入ったフォルダを上書きしてコピーするプログラムを作りたいと思い、フォルダを選択し、選択したフォルダをラベルに表示させるというところまではできました。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim fbd As New FolderBrowserDialog fbd.Description = "フォルダを指定してください。" fbd.RootFolder = Environment.SpecialFolder.Desktop fbd.SelectedPath = "C:\Windows" fbd.ShowNewFolderButton = True If fbd.ShowDialog(Me) = DialogResult.OK Then Console.WriteLine(fbd.SelectedPath) Label3.Text = fbd.SelectedPath End If End Sub ですが、ここから試行錯誤を繰り返してみるも、FolderBrowserDialogで選択したフォルダにフォルダを上書きすることができないのです。アドバイスよろしくお願いします。

  • VB.NRT FolderBrowserDialogを使用して、選択したフォルダ内のファイルを表示させるには?

    VB.NET初心者です。 ネットで調べてFolderBrowserDialogを使用して、フォルダを表示させ、フォルダのパスを取得するところまではできたのですが、フォルダの中のファイルを表示させるには、どうしたらよいのでしょうか? OpenFileDialogクラスを使えば、ファイルは表示できるようですが、ファイルの入っているフォルダのパスだけ取ってきたい(複数ファイルを一度に読みこむため)のですが、何か良い手はありませんでしょうか? また、FolderBrowserDialog使用で前回選択したフォルダを次にダイアログを開いたときにも表示させることは可能でしょうか? よろしくお願いいたします。 Dim fbd As FolderBrowserDialog = New FolderBrowserDialog() fbd.Description = "フォルダを指定してください。" If fbd.ShowDialog() = DialogResult.OK Then Console.WriteLine(fbd.SelectedPath) End If Dim folder As String = fbd.SelectedPath Dim serchpattern As String = "*.txt" Dim files As New ArrayList 'フォルダ名格納 Get_FPath(folder, serchpattern, files) End Sub

  • Generics extends ObjectとObjectの違い

    初めて質問させていただきます。 Generics(extendsの?)の考え方についてです。 例えば、下記のような関数を作成したとします。 ======================================= public static String getHoge(Map<String , ? extends Object> checkMap){   Set<Map.Entry<String, Object>> checkMapKeySet = checkMap.entrySet();   ~ 処理 ~ } ======================================= 2行目で「型の不一致: Set<Map.Entry<String,capture#3-of ? extends Object>> から Set<Map.Entry<String,Object>> には変換できません。」とコンパイラから怒られます。 では、Objectの派生クラスをObjectとして扱えないのかと単純に理解しようとすると、以下のコードは普通にコンパイルできてしまいます。 ======================================= public static String getHoge(Map<String , ? extends Object> checkMap){   for(Map.Entry<String, ? extends Object> checkMapEntry : checkMap.entrySet()){     Object obj = checkMap.get("aa");     ~ 処理 ~   } } ======================================= 最初のコードがエラーになるなら、2つ目のコードの3行目(Object obj =の行)が何故エラーにならないのか、その違いをどのように解釈していいのか悩んでいます。 ご存じの方がいらっしゃいましたら、アドバイスでもいただけると幸いです。

    • ベストアンサー
    • Java
  • VB ファイルの検索について

    VB ファイルの検索について こんにちは VB2008でファイルの種類を指定して、検索するプログラムを作っています。 要求: 1ボタンをクリックして、検索対象のフォルダを指定 2事前に決めたファイル種類(*.txt)を検索する 3(*.txt)がある場合はディスクトップにコピーする 今は1ができましたが、2と3について、どうやって書くのかわからないです。 --------------------ソース------------ Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim SourcePath As String Dim fdb As New FolderBrowserDialog With fdb 'Select to Folder and open it .Description = "Please Select Folder" .RootFolder = System.Environment.SpecialFolder.MyComputer SourcePath = TextBox1.Text .SelectedPath = SourcePath If fdb.ShowDialog() = DialogResult.OK Then TextBox1.Text = fdb.SelectedPath End If End With End Sub End Class ------------------------------------------------------- 以上  宜しくお願い致します。(^@^)

  • Powershell プログラミングについて

    サーバ管理をしている中で、日次で前日のイベントログを出力するプログラムを書きました。 初めてPowershellを使用し、ネットを観ながら見よう見まねで書いていたのですが、 ひとつ躓いてしまい・・・教えていただけないでしょうか? ---------------------------------------------------------------------------------- # system、application、securityのログを出力(ErrorとWarningのみ) $type = [string] $event = [system.diagnostics.eventLogEntry] $count = [int] $count = 0 foreach ($type in "system","application","security"){ # ログ取得 $event = get-EventLog -logname $type -after $start_time_yesterday -before $end_time_yesterday | ` Where-Object { $_.EntryType -eq "Warning" -or $_.EntryType -eq "Error" } | ` Where-Object { $_.EventID -ne "1111" -and $_.EventID -ne "5722" -and $_.EventID -ne "5719" }| ` Select-Object EntryType,EventID,TimeGenerated,Source,Message,HostName[$hostname] # テキストファイルに出力 $event >> $fPath ---------------------------------------------------------------------------------- このようなプログラムを書いたところ、 出力結果は以下のようになりました。 ---------------------------------------------------------------------------------- EntryType : Warning EventID : 14 TimeGenerated : 2012/10/10 8:54:05 Source : W32Time Message : タイム ソースとして使うドメイン コントローラを見つけることができません でした。15 分後に再試行します。 HostName[SAKURAI-PC] : ---------------------------------------------------------------------------------- HostName :[SAKURAI-PC] にするにはどのように書いたらよいのでしょうか? ご指導お願いいたします。

  • PowerShellでTXTを1行ごと読込んで処理

    PowerShellでの処理で教えてください。 C:\list\loglist.txtというファイルに、 C:\Documents and Settings\mama\My Documents\Shell\log C:\share\LOGS C:\diaglog というように、ログフォルダまでのパスが書いてあるファイルがあり、この中身は、時々変更されます。 このテキストを1行ずつ読み込みながら、各フォルダの配下にあるサブフォルダを含めたフォルダ内に、.logというファイルがあり、そのファイルサイズが0でなければ、ファイルを別フォルダへコピーして、元のファイルは削除するということを行いたいのです。 そこで、下記のようなスクリプトを書いてみましたが、エラーとなってしまいます。 $day = Get-Date -format yyyyMMdd $LOGPATH = "C:\list\loglist.txt" $txt = Get-Content $LOGPATH $sr = New-Object System.IO.StreamReader($txt, [System.Text.Encoding]::UTF8) while (($line = $sr.ReadLine()) -ne $null) { #0じゃないログを取得 $fname = Get-ChildItem -path $ff -Recurse | Where-Object {$_.Length -gt 0} # ログをバックアップフォルダへコピーしてリネーム     ・     ・     ・     ・ この#0じゃないログを取得にまで至らず、エラーがでます。 エラーは New-Object : "2" 個の引数を指定して ".ctor" を呼び出し中に例外が発生しました: "指定されたパスのフォーマットはサポートされていません。" 発生場所 行:×× 文字:×× + $sr = New-Object <<<< System.IO.StreamReader($txt, [System.Text.Encoding]::UTF8) + CategoryInfo : InvalidOperation: (:) [New-Object]、MethodInvocationException + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand [System.Object[]] に 'ReadLine' という名前のメソッドが含まれないため、メソッドの呼び出しに失敗しました。 発生場所 行:×× 文字:×× + while (($line = $sr.ReadLine <<<< ()) -ne $null) + CategoryInfo : InvalidOperation: (ReadLine:String) []、RuntimeException + FullyQualifiedErrorId : MethodNotFound パスを呼び出す元になっている『C:\list\loglist.txt』は、他の担当者が作成したものですが、パスの最後に\を入れても変わりませんでした。 PowerShellISEで、$line だけを実行すると、パスはテキストの1行目のC:\Documents and Settings\mama\My Documents\Shell\logが取得できています。 コードはhttp://codezine.jp/article/detail/3592?p=2を参考に作ってみたのですが、まだまだ初心者のためどこを修正すればいいのかわからず途方にくれています。 コードの修正か、もしくは、もっと別な方法などありましたら、ご教授をお願いします。

  • System.String.Splitでエラー

    下記のようなSystem.String.Splitメソッドを使ったプログラムでエラーが出たのですが、解決方法がわかりません。 2番目の引数なしでも実行はできるのですが、分割した文字列が空の場合は省きたいので2番目の引数は省略したくありません。 なにか気づく方がいましたら、お教えください。 Visual C++ 2010を使っています。 他に環境についてなど補足が必要なことがありましたら言ってください。 using namespace System; int main(){ String^ s = "単語1 単語2 単語3 "; array<String^>^ result = s->Split(' ', StringSplitOptions::RemoveEmptyEntries); } error C2664: 'cli::array<Type> ^System::String::Split(...cli::array<wchar_t,dimension> ^)' : 2 番目の引数を 'System::StringSplitOptions' から 'wchar_t' に変換できません。(新しい機能 ; ヘルプを参照)

  • VC++でファイルへの書き込みについて

    VC++にて、ファイルへの書き込みを行っているのですが、どうもうまくいきません。 Form.h //ファイル->開く private: System::Void 開くOToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { //開くダイアログ表示 OpenFileDialog^ dlg = gcnew OpenFileDialog(); dlg -> Filter = "CSV形式(*.csv)|*.csv|すべてのファイル(*.*)|*.*"; if (dlg -> ShowDialog() != System::Windows::Forms::DialogResult::OK){ return; } //CSV形式でファイルを読み込み LoadCsvFile( dlg -> FileName ); } //ファイルの読み込み private: bool LoadCsvFile( String^ path ){ //ファイルをオープン StreamReader^ reader = gcnew StreamReader( path, System::Text::Encoding::GetEncoding("shift-jis")); //ファイル読み込み String^ data; data = reader -> ReadLine(); st = from_cli(data); //dataをグローバル変数std::string = stに変換 reader -> Close(); return true; } //System::String -> std::string変換用 std::string from_cli(String^ input, Encoding^ encoding) { array<Byte>^ result = Encoding::Convert(Encoding::Unicode, encoding, Encoding::Unicode->GetBytes(input)); if ( result->Length != 0 ) { pin_ptr<unsigned char> pin = &result[0]; return std::string(reinterpret_cast<char*>(pin), result->Length); } return std::string(); } //ボタンクリックイベント private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { std::ofstream ofs; ofs.open( "test.txt" ); ofs << st << std::endl; ……(1) ofs.close(); } csvファイルを読み込み後、ボタンクリックイベントを行ってもtext.txtの内容が書き変わりません。 (1)の部分をofs << "test" << std::endl;に変更したり、 button1_Click内で変数st2を宣言し、 ofs << st2 << std::endl;に変更すると、問題無くファイルへの書き出しが行えます。 文字コード等が関わっているのでしょうか? 御助言の程、よろしくお願いします。

  • Visual Studio 2005でWindowsフォームのプログラミングについて

    「Visual Studio 2005」のC++でWindowsフォームのプログラミングをしているのですが、画像保存ができなくて困ってます。 「開く」はどうにか参考書を見ながらできましたが、「保存」ができません。以下がプログラムとなっております。 private: System::Void 開くOToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {  OpenFileDialog^ myDLG = gcnew OpenFileDialog();  myDLG->AddExtension = true;  myDLG->DefaultExt = "bmp";  myDLG->FileName = "*.bmp";  myDLG->ShowReadOnly = false;  myDLG->Filter = "ビットマップ(*.bmp) | *.bmp | jpeg(*.jpg;*.jpeg) | *.jpg;*.jpeg";  if(myDLG->ShowDialog()==System::Windows::Forms::DialogResult::OK){    this->Text = myDLG->FileName;    pictureBox1->Image = gcnew Bitmap(myDLG->FileName);    Invalidate();  } } private: System::Void 保存SToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {  SaveFileDialog^ dlg = gcnew SaveFileDialog();  dlg->Filter = "ビットマップ(*.bmp) | *.bmp | jpeg(*.jpg;*.jpeg) | *.jpg;*.jpeg | すべてのファイル(*.*) | *.*";  if(dlg->ShowDialog() != System::Windows::Forms::DialogResult::OK){    return;  } /*** ここからわかりません。 ***/ } 知ってる方がいましたら教えてください。よろしくお願いします。

専門家に質問してみよう