Here is my problem. I have a build step in TeamCity that fires a powershell which updates a configuration parameter in another TC sub-project and resets the build counter via an API call. To do so, I have to pass valid credentials, which I am setting up as a parameter to be entered when the a custom build is run. This works great, however, for some reason if the password is typo'd even once(and I am using TC's password type parameter so it is masked, making this easy to do), the user's windows account is locked immediately. I assume this is something TC is doing to send the request multiple times, but regardless of why it is happening and is obviously not ideal.
The most ideal solution would simply be able to run the build using the credentials of the user who is kicking it off. So far as I can tell, there is no 'Run As' option, so is there a way for me to retrieve and use the password of the current user logged in to TeamCity, perhaps as a system variable? I've read through the documentation and have not had any luck finding what I need. Maybe there is a way to do this through powershell?
Any ideas/suggestions would be greatly appreciated.
JetBrains is working on https://github.com/JetBrains/teamcity-runas-plugin
I hope it will appear soon
Related
This is for a Windows environment: Windows 7-10 / Server 2008/2012.
I want to create a script which will automate login at a URL, navigate to a another page, and then submit a form on that page.
Open Internet Explorer, if not already opened
Login to www.example.com/login (takes me to www.example.com/home)
Once logged in, go to www.example.com/submit-form-data
Enter values for fields and submit the form via button click
At first, I thought maybe I could use something like iMacro, a greasemonkey alternative, or even bookmarklets. But that'd all still require some user intervention. If there is a macro program which can replay all the steps, perhaps I'd be open to that. Otherwise, I think I may need to employ some kind of PowerShell or Curl-like program for Windows to handle UI automation.
At least with PowerShell, I don't think submitting a form should be too bad. If that's all I had to do, I wouldn't need any help. The problem is how do I log into a site, then navigate to a specific URL, on top of submitting a form, all in the same script?
I don't have to use PowerShell. I'd be open to alternatives to Curl on Windows, whatever those might be.
Thank you for your help in advance.
If your goal is to drive Internet Explorer, the most painless and robust way to accomplish this is probably to use Selenium WebDriver.
Many folks successfully use it on Windows via the Selenium C# bindings (although my favorite way to use Selenium on Windows is via the Selenium Python bindings).
If you're keen on using PowerShell, it should be possible to use Selenium from PS, although there are no official PS bindings from what I can tell.
We have a new server running and we got some new programs doing import routines. So far so good... But there is one program that is put into autostart folder. So it doesn't run until admin logs in and it stops if we logout.
I'd like to put this one into a seperate session so it may work without any interaction by simply starting it with the task scheduler at startup. Is this the right way to do this? Is it safe if I log in later and log out?
Many thanks!
Edit: The applications shows as a symbol in the task bar if running, it can be configured by this. Anything I must know about this if I change?
Edit: It is not my application, I cannot rewrite it as a service.
I successfully added the application by using task schelduler on startup. Login and logout will not quit the application but no symbol is shown. Please add details to my side questions and I'll mark your answer as the accepted one.
Edit: Ended up using this one. If I have to configure, I stop the application in task manager and start it again by link. After that I quit the application and restart it by task scheduler manual start.
You need to run your program as a Windows Service. One way of doing it is using the sc.exe program:
> sc create <new_service_name> binPath= "c:\myapp\myapp.exe"
You can read about it here.
You need to separate your application in two.
To allow it to run without a user session, you need a windows service. That should handle all the background stuff. You can then register the service and set it to start when the system starts.
To allow it to have a UI, and show up in the notification area, you need a windows application. This will be in autostart as usual, and will communicate with the service - for example, over named pipes.
While it is still (barely) possible to run an UI application without a user session, it's only maintained for backwards compatibility, and already shows a lot of problems. It will likely be removed altogether in the future, because it breaks quite a few contracts. Do not rely on hacks like this.
I also used the task scheduler to create the application at system startup. It should be noted that if you want to use for mining, you have to disable an option in "settings" where it says that if the application lasts more than three days in a row it will end.
It really works wonderfully!
it is a old question but I recently solved in another way...
(before I was using a scheduled-task for startup but this gave me diverse problems with lots software...)
Some programs also for diverse reasons must be run at a user level... or even inside a specific user session...
So the best way I found was to use a tool like Sysinternal/Autoruns to program the auto-logon to a specific user (it is a registry setting)... and in the startup-folder of that user (or any other "autorun/autolaunch" task)... run a script that first locks the screen... and next runs the other intended programs... that will run under that user profile...
so you can choose a standard user or a administrator... or even launch programs from a standard user in adminsitrator mode...
I hope will help...
This "hack" solved me many problems with startup apps...
I could not get the "sc create" command to work. Instead I manually edited the registry using regedit. I added a new key in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services.
I used the following page to figure out required parameters and their values. Note that the names do not map.
https://learn.microsoft.com/en-us/windows-hardware/drivers/install/inf-addservice-directive
Old question, but for anyone that stumbles here. Use srvany to set the program as a custom service.
Note that when you do this with for example dropbox, googledrive, etc., you will need stop the service, then open the program normally to make changes like password, updates, etc.
below is a well enough intro.
https://www.iceflatline.com/2015/12/run-a-windows-application-as-a-service-with-srvany/
Download the tool kit here
https://www.microsoft.com/en-us/download/details.aspx?id=17657
Convert user application to Service and Register it using Regsvr32 or installutil.exe. It will start the service using SYSTEM user account. Which is a high privilege account.
Note : You can`t run any Window based application. Even a Message only window.
I am trying to updating a software that is company wide. When the update is applied to the server, the client machines recognize they need an update and ask if you wish to update or not. To update, the user would need to run as admin, which is'nt an option in this case.
We would like to automate this process using powershell, using the Invoke-Command feature. For the most part, the only thing that the update does is copy new files to the programs folder, which we have achieved with robocopy. However, there is one registry key that needs to be added in multiple locations. There is a setup file that does this, but requires a user (with admin privileges) click a couple buttons, and we want this to be completely automated.
So I guess the short version of my question is, what is the best way to handle the registry changes that setup.exe does? It would be nice if there was a way to invoke the script that the executable does.
As for my question, I solved the problem with a slightly diferent approach. (One that should have been tried initially)
When (ProgramName).exe is run, if it sees that it needs updated, it runs a program called (ProgramName).setup.exe with the parameters :
Client="Local folder" server="server location"
These parameters did NOT work from the command line, however, and so I ended up using a powershell script to make a scheduled task that ran (ProgramName).setup.exe with said parameters.
Another huge advantage to this was the fact that I could create an icon that allowed a regular user to run the scheduled task with admin privileges. I couldn't setup a shortcut directly, however, I wrote an AUTO-it Executable that would run the task as admin.
I hope someone can get some level of help out of this post!
Is there a way to access the UAC prompts via UIAutomation (I'm writing a test for an installation process).
From http://msdn.microsoft.com/en-us/library/ms742884.aspx it looks like there is a way to set this up.
So the question is how to make this automatically?
My current UIAutomation setup is made of the amazing White API (white.codeplex.com) with a bunch of extension methods from the O2 Platform
For security reasons, this is guaranteed to be impossible.
The whole point of UAC is that programs cannot automatically click Allow.
Not exactly the answer you'd have liked but a workaround based on SLaks's answer (Thanks #SLaks for answer) i.e. for security reasons Windows wouldn't allow automated clicks on the 'yes'. In that case if bypassing is the only option we could have same effect as elevated prompt and clicked yes by setting "UAC: Behaviour of elevation prompt for administrators in Admin Approval Mode" to 'Elevate without prompting' in security policy. I tried this in my automated tests and they are giving me same effect as clicking 'yes' on that prompt if it was prompted. Of course it isn't prompting since I've changed that option.
How to set a specific logon time for a specific user on Windows XP?
For example, the computer is an "always on machine" and most of the time no one is logged on. I want to set a time for my user to log on, without someone actually having to be in front of the machine. I've tried a workaround with the built-in auto logon function (control userpassword2), but I still need a secure system as I'm not the only user, and would still want a password even if I was the only user.
I have searched for third party software, but to no avail. I've a good knowledge of batch and Python scripting and a little of Java, so any pointers with any of those would help.
How can it be "secure" if it logs you on without you being there? Surely it would be better for it to wait for you to type in a password (i.e. the login prompt)?
If you want a fast "startup" time, then you can lock the workstation (ctrl+alt+del to open the Task Manager and then click 'Lock'. This shows a dialog just like the login prompt, but when you enter your password you instantly continue your existing session). Or if you want to be more eco friendly, put your PC into Sleep mode, which most PCs will return from (again with an optional password prompt) in less than 5 seconds.
One way I just thought of: Run a Vnc Server, and hack into an open source viewer program. Then you can rig it with some code to pass keyboard commands back into the computer, maybe implement some screen scraping to make sure it only does it when appropriate.
But seriously, there has to be a better way. Why are you trying to do this?