0

だから私は、学校の数人がアクセスできる共有フォルダを使用する基本的なプログラム(信じられないほどバグがありますが、私たちはそれをとても気に入っています)を持っています(使いやすいようにパスが変更されています)。これは、メッセージング アプリケーションとして機能するように設計されており、各ユーザーが同じメモ帳ファイルに書き込み、Get-Content および -Wait パラメーターを使用してメッセージを Poweshell スクリプトに送信します。「/」を使用していくつかのコマンドを追加しましたが、ユーザーが入力して、現在プログラムを使用している他のすべての人を表示できるコマンド (つまり、/online) が必要です。

前のレコードを消去しながら、個々のユーザーが独自のユーザー名で x 秒ごとに更新される別のテキスト ファイルをセットアップしようとしました。

while (1){
    Clear-Content -Path C:\users\Freddie\Desktop\ConvoOnline.txt
    Start-Sleep -Milliseconds 5000
    Add-Content -Path C:\users\Freddie\Desktop\ConvoOnline.txt $env:UserName
}

したがって、これは後で呼び出すことができます。

elseif($_ -match "/online"){Get-Content -Path C:\users\Freddie\Desktop\ConvoOnline.txt}

しかし、これは機能せず、ユーザー間で同期されないため、1 人のユーザーが現在のユーザーをワイプし、他のユーザーのサイクルが自分の名前をワイプするまで、そのユーザーのみがアクティブとして表示されます。

XY 問題を回避するために、実行中の Powershell スクリプトをアクティブに使用している (したがって更新している) ユーザーを特定するためのかなり単純な方法 (まだ最大 2 つのファイルのみを使用) が必要です。

コード全体:

Add-Type -AssemblyName System.speech
$speak = New-Object System.Speech.Synthesis.SpeechSynthesizer
$speak.Volume = 100
Write-Host "Type /helpp, save it, then hit backspace and save it again     for a guide and list of commands!"
Get-Content -Path C:\users\Freddie\Desktop\Convo.txt -Wait |
 %{$_ -replace "^", "$env:UserName  "} |
 %{if($_ -match "/cls"){cls} `
 elseif($_ -match "/online"){Get-Content -Path C:\users\Freddie\Desktop    \ConvoOnline.txt} `
 elseif(($_ -match "/afk") -and ($env:UserName -eq "Freddie")){Write-Host     "$env:UserName has gone afk"} `
 elseif(($_ -match "/say") -and ($env:UserName -eq "Freddie"))    {$speak.Speak($_.Substring(($_.length)-10))} `
elseif($_ -match "/whisper"){
 $array = @($_ -split "\s+")
 if($array[2] -eq "$env:UserName"){
 Write-Host $array[2]
 } `
 } `
 elseif($_ -match "/help"){
 Write-Host "Help: `
 1. Press Ctrl+S in Notepad to send your message `
 2. Make sure you delete it after it's been sent `
 3. If your message doesn't send properly, just hit backspace and all but     the last letter will be sent `
  `
 COMMANDS: `
  `
 /online - Lists all users currently in the chat `
 /cls - Clears you screen of all current and previous messages `
 /whisper [USERNAME] [MESSAGE] - This allows you to send a message     privately to a user"
 }
 else{Write-Host "$_"}}
#
#
#
#
#Add a command: elseif($_ -match "/[COMMAND]"){[FUNCTION]}
#
#Make it user-specific: elseif($_ -match "/[COMMAND]" -and $envUserName     -eq "[USERNAME]"){[FUNCTION]}
4

1 に答える 1