J'ai donc un programme de base (incroyablement buggé mais nous l'aimons bien) qui utilise un dossier partagé auquel deux personnes à l'école ont accès (les chemins ont été changés pour la facilité d'utilisation). Il est conçu pour fonctionner comme une application de messagerie, chaque utilisateur écrivant dans le même fichier Notepad pour envoyer un message à un script Poweshell en utilisant les paramètres Get-Content et -Wait. J'ai ajouté quelques commandes en utilisant "/", mais je veux un (c'est-à-dire/en ligne) qu'un utilisateur peut taper et voir toutes les autres personnes utilisant actuellement le programme.Comment vérifier les utilisateurs utilisant actuellement un programme PowerShell?
J'ai essayé de mettre en place un fichier texte différent qui est mis à jour toutes les x secondes par chaque utilisateur avec leur propre nom d'utilisateur, tout en essuyant le précédent record:
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
}
donc cela peut être appelé plus tard :
elseif($_ -match "/online"){Get-Content -Path C:\users\Freddie\Desktop\ConvoOnline.txt}
Mais cela ne fonctionne pas, il ne se synchronise pas entre les utilisateurs, donc un utilisateur essuiera les utilisateurs actuels et seulement apear actif, jusqu'à ce que les autres utilisateurs du cycle des lingettes leur nom. Pour éviter le problème XY, je veux un moyen assez simple (toujours en n'utilisant que deux fichiers maximum) pour déterminer quels utilisateurs utilisent activement (et donc mettent à jour) le script Powershell qu'ils exécutent.
Code entier:
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]}
Veuillez fournir un [MCVE (exemple minimal, complet et vérifiable)] (http://stackoverflow.com/help/mcve). – mklement0